Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Помогите с экселем плз  [new]
Nnnnnn
Guest
Нужно в эксель выкинуть формулу, в зависимости от условия - формулы разные.
Никак не могу добиться нужного результата как ни бьюсь (( уже была куча экспериментов с "," и ";", одинарными и двойными кавычками... самое путное чего удалось добиться - вывод в ячейку самого текста формулы..
DATEDIF - это функцыя РАЗНДАТ экселя, с параметром "Y" вычисляет количество лет между двумя датами.
Вот что написано в коде:

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

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

ЗЫ: не посылайте меня читать статьи по записи макросов и созданию отчетов в экселе, другие формулы я в эксель выкидывала уже.
23 окт 09, 21:32    [7832509]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Гуру VBA
Guest
Nnnnnn, а какой установлен формат в ячейке куда нужно вывести формулу?
23 окт 09, 21:48    [7832547]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Nnnnnn
Guest
2Гуру VBA,

Числовой.
23 окт 09, 23:57    [7832881]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Гуру VBA
Guest
Попробуй так:

LOCAL lcStroka1, lcStroka2

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

...Cells(i,j).FormulaR1C1 = IIF(!EMPTY(duvol), &lcStroka1, &lcStroka2 )
24 окт 09, 03:44    [7833250]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Гуру VBA
Guest
А вообще, ты интересную функцию используешь...

Нюанс в том, что Вы не найдете эту функцию в списке Мастера функций, нажав кнопку fx - она является недокументированной возможностью Excel (точнее говоря, найти описание этой функции и ее аргументов можно только в полной версии англоязычной справки, поскольку на самом деле она оставлена для совместимости со старыми версиями Excel и Lotus 1-2-3)....
24 окт 09, 03:50    [7833255]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Nnnnnn
Guest
2Гуру VBA,

А мне функция понравилась ) Мне еще с ее помощью месяцы и дни высчитать надо =) там параметр другой.
24 окт 09, 13:47    [7833829]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Nnnnnn
Guest
Да, забыла написать, так, как ты предложил, не работает. Пишет missing expression.
24 окт 09, 16:13    [7834076]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
tanglir
Member

Откуда:
Сообщений: 28966
Гуру VBA
Попробуй так:

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 вообще ругается на эту функцию, говорит - нет такой. Так что проблема, наверное, не в фоксе, а в хехеле.
24 окт 09, 21:13    [7834453]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Nnnnnn
Guest
2tanglir,
Эксель не ругается на нее и вполне понимает, тестировала на нескольких документах, все нормально.

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

	IF EMPTY(lddate)
	r1='Q'+ ALLTRIM(STR(i))
        ...
	_screen.activeform.oExcel.cells(i,j).Formula= '=DATEDIF(&r1,F1,"Y")'
	ELSE 
	...
	ENDIF  

Вобщем, думаю, что ему не нравилось тот способ обращения к ячейкам именно в этой формуле вот он и психовал.
24 окт 09, 23:31    [7834713]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Гуру VBA
Guest
Вот полностью рабочий вариант - как для Excel 2003, так и для Excel 2007.

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.

25 окт 09, 01:23    [7834939]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Nnnnnn
Guest
2Гуру VBA,

Спасибо =) У тебя красивше )
25 окт 09, 08:48    [7835147]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с экселем плз  [new]
Dima T
Member

Откуда:
Сообщений: 15302
Гуру VBA, некоторые вещи можно писать гораздо проще.
Если VFP9 то ON ERROR можно на TRY... CATCH заменить
TRY
    loExcel = GetObject(, "Excel.Application")
CATCH
   TRY
       loExcel = CreateObject("Excel.Application")
   CATCH
       loExcel = NULL
       MessageBox('MS Excel не установлен', 16, 'ОШИБКА')
   ENDTRY
ENDTRY

и тут непонятно зачем столько плюсов
	lcStroka1 = '=DATEDIF(RC[-3],R1C6,' + '"' + 'Y'  + '"' + ')' 
	lcStroka2 = '=DATEDIF(RC[-1],R1C6,' + '"' + 'Y'  + '"' + ')' 
это то же самое
	lcStroka1 = '=DATEDIF(RC[-3],R1C6,"Y")' 
	lcStroka2 = '=DATEDIF(RC[-1],R1C6,"Y")' 
25 окт 09, 09:42    [7835166]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить