Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с экселем плз / 12 сообщений из 12, страница 1 из 1
23.10.2009, 21:32
    #36270049
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Нужно в эксель выкинуть формулу, в зависимости от условия - формулы разные.
Никак не могу добиться нужного результата как ни бьюсь (( уже была куча экспериментов с "," и ";", одинарными и двойными кавычками... самое путное чего удалось добиться - вывод в ячейку самого текста формулы..
DATEDIF - это функцыя РАЗНДАТ экселя, с параметром "Y" вычисляет количество лет между двумя датами.
Вот что написано в коде:

Код: plaintext
...cells(i,j).value= IIF(!EMPTY(duvol),'=DATEDIF(RC[-3],R1C6,""Y"")','=DATEDIF(RC[-1],R1C6,""Y"")')

У меня уже оба глаза замылились, может кто-нибудь увидит то бревно, которое я не замечаю?

ЗЫ: не посылайте меня читать статьи по записи макросов и созданию отчетов в экселе, другие формулы я в эксель выкидывала уже.
...
Рейтинг: 0 / 0
23.10.2009, 21:48
    #36270063
Гуру VBA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Nnnnnn , а какой установлен формат в ячейке куда нужно вывести формулу?
...
Рейтинг: 0 / 0
23.10.2009, 23:57
    #36270144
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
2Гуру VBA,

Числовой.
...
Рейтинг: 0 / 0
24.10.2009, 03:44
    #36270205
Гуру VBA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lcStroka1, lcStroka2

lcStroka1 = '=DATEDIF(RC[-3],R1C6,""Y"")'
lcStroka2 = '=DATEDIF(RC[-1],R1C6,""Y"")'

...Cells(i,j).FormulaR1C1 = IIF(!EMPTY(duvol), &lcStroka1, &lcStroka2 )
...
Рейтинг: 0 / 0
24.10.2009, 03:50
    #36270210
Гуру VBA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
...
Рейтинг: 0 / 0
24.10.2009, 13:47
    #36270412
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
2Гуру VBA,

А мне функция понравилась ) Мне еще с ее помощью месяцы и дни высчитать надо =) там параметр другой.
...
Рейтинг: 0 / 0
24.10.2009, 16:13
    #36270517
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Да, забыла написать, так, как ты предложил, не работает. Пишет missing expression.
...
Рейтинг: 0 / 0
24.10.2009, 21:13
    #36270726
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Гуру VBAПопробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lcStroka1, lcStroka2

lcStroka1 = '=DATEDIF(RC[-3],R1C6,""Y"")'
lcStroka2 = '=DATEDIF(RC[-1],R1C6,""Y"")'

...Cells(i,j).FormulaR1C1 = IIF(!EMPTY(duvol), &lcStroka1, &lcStroka2 )
1) Ув. "Гуру", а какого ...кхе-кхе... тут делают макроподстановки ???
2)Хехель 2003 вообще ругается на эту функцию, говорит - нет такой. Так что проблема, наверное, не в фоксе, а в хехеле.
...
Рейтинг: 0 / 0
24.10.2009, 23:31
    #36270815
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
2tanglir,
Эксель не ругается на нее и вполне понимает, тестировала на нескольких документах, все нормально.

И вывод ее в эксель я сделала, после второго дня экспериментов пришла к виду:

Код: plaintext
1.
2.
3.
4.
5.
6.
	IF EMPTY(lddate)
	r1='Q'+ ALLTRIM(STR(i))
        ...
	_screen.activeform.oExcel.cells(i,j).Formula= '=DATEDIF(&r1,F1,"Y")'
	ELSE 
	...
	ENDIF  

Вобщем, думаю, что ему не нравилось тот способ обращения к ячейкам именно в этой формуле вот он и психовал.
...
Рейтинг: 0 / 0
25.10.2009, 01:23
    #36270891
Гуру VBA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Вот полностью рабочий вариант - как для Excel 2003, так и для Excel 2007.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
LOCAL  loExcel, lnNom, lcStroka1, lcStroka2

#DEFINE True .T.
#DEFINE False .F.
lcOldError = ON("ERROR")
ON ERROR loExcel = .NULL.
loExcel = GetObject(, "Excel.Application")
ON ERROR &lcOldError

IF ISNULL(loExcel)
	loExcel = CreateObject("Excel.Application")
ENDIF


WITH loExcel

	.Workbooks.Add()	

	lcStroka1 = '=DATEDIF(RC[-3],R1C6,' + '"' + 'Y'  + '"' + ')' 
	lcStroka2 = '=DATEDIF(RC[-1],R1C6,' + '"' + 'Y'  + '"' + ')' 

	* Исходные данные
	*----------------------------
	.Cells( 1 ,  1 ).Value = "01.01.2005"
	.Cells( 1 ,  3 ).Value = "01.01.2008"
	.Cells( 1 ,  6 ).Value = "01.01.2009"
	
        *---------------------------------------------------------------------------
	* При lnNom >  0  в ячейке D1 получаем результат работы формулы равный  4 
	* При lnNom <=  0  в ячейке D1 получаем результат работы формулы равный  1 
	*---------------------------------------------------------------------------
	lnNom =  1 

	* Результат
	*----------------
	.Cells( 1 ,  4 ).Formula = IIF(lnNom >  0 , lcStroka1, lcStroka2 )
	
	.Range("A1").Select

ENDWITH        &&WITH loExcel


loExcel.Visible = .T.

...
Рейтинг: 0 / 0
25.10.2009, 08:48
    #36270997
Nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
2Гуру VBA,

Спасибо =) У тебя красивше )
...
Рейтинг: 0 / 0
25.10.2009, 09:42
    #36271012
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с экселем плз
Гуру VBA, некоторые вещи можно писать гораздо проще.
Если VFP9 то ON ERROR можно на TRY... CATCH заменить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
TRY
    loExcel = GetObject(, "Excel.Application")
CATCH
   TRY
       loExcel = CreateObject("Excel.Application")
   CATCH
       loExcel = NULL
       MessageBox('MS Excel не установлен',  16 , 'ОШИБКА')
   ENDTRY
ENDTRY

и тут непонятно зачем столько плюсов
Код: plaintext
1.
	lcStroka1 = '=DATEDIF(RC[-3],R1C6,' + '"' + 'Y'  + '"' + ')' 
	lcStroka2 = '=DATEDIF(RC[-1],R1C6,' + '"' + 'Y'  + '"' + ')' 
это то же самое
Код: plaintext
1.
	lcStroka1 = '=DATEDIF(RC[-3],R1C6,"Y")' 
	lcStroka2 = '=DATEDIF(RC[-1],R1C6,"Y")' 
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с экселем плз / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]