VBA: как в строку вывести кавычки? #181650


#0 by Babay
в ячейку экселя вставляю пер-ую str str = "=ЕСЛИ(ДАТА(ГОД(ДАТАЗНАЧ(" + cur_year + "))+34;МЕСЯЦ(ДАТАЗНАЧ(" + cur_year + "));ДЕНЬ(ДАТАЗНАЧ(" + cur_year + ")))>B9;0.005*H9;1)" Задача: везде перед  и после cur_year  надо вставить кавычки ("). КАК? Помогите, пожалуйсто, очень надо...
#1 by smaharbA
"""
#2 by smaharbA
+ А че FormulaLocal пользуешь ? С проста Formula не прокатит
#3 by Babay
на первый debug-взгляд помогает А что она делает. Просто сегодня сказали НАДО. Вот я и сижу VBA ковыряю
#4 by Babay
+ а как строку переносить по строкам, ну типа в 1С через | ,а тут как?
#5 by smaharbA
Если будет типа такого thisworkbook.worksheets.cells(1,1).formula=str где str твоя строка(кстати str нельзя пользовать это зарезервировано-функция преобразования) то так строка и будет пока ячейку на редактирование не откроешь и не жмакнешь ентер, надо либо английский синтаксис либо .formulalocal
#6 by smaharbA
..." & vbCr & "...
#7 by Babay
У меня примерно вот так: cur_range.Offset(i, 0) = "=ЕСЛИ(ДАТА(ГОД(ДАТАЗНАЧ(""" + cur_year + """))+34;МЕСЯЦ(ДАТАЗНАЧ(""" + cur_year + """));ДЕНЬ(ДАТАЗНАЧ(""" + cur_year + """)))>B9;0.005*H9;1)" Это в цикле. Может как по умнее можно?
#8 by romix
Попробуй удвоить кавычку. Или chr - символ кавычки.
#9 by Babay
+ это почему-то не прокатывает, хотя, если результирующую строку из debug вытаскиваю в формулу ячейки, то все ОК. Подскажите, где торможу?
#10 by smaharbA
А что, во всех ячейках одно и тоже будет ? cur_year = "01.10.1996" Set myrange = Worksheets.Range("a9:a100") myrange.FormulaLocal = "=ЕСЛИ(ДАТА(ГОД(ДАТАЗНАЧ(""" + cur_year + """))+34;МЕСЯЦ(ДАТАЗНАЧ(""" + cur_year + """));ДЕНЬ(ДАТАЗНАЧ(""" + cur_year + """)))>B9;0,005*H9;1)"
#11 by smaharbA
+ Это если B9 и H9 меняются на 10/11/12...
#12 by Babay
Там будут так же менятся B9 и H9 (типа также как и cur_year)
#13 by ШтушаКутуша
if <cur_year as String> then      .....ДАТАЗНАЧ(" + """+cur_year +"""+ ")).....    else      .....ДАТАЗНАЧ(" + """+CStr(cur_year) +"""+ ")).....    endif
#14 by Babay
А если так, то как по ячейкам пробегаться?
#15 by smaharbA
Это будет меняться B9 и H9 в счас глянем чтобы кур_яр менять за раз
#16 by smaharbA
Так побежит само
#17 by Babay
так мне для разных ячеек нужны разные кур_яры B9 bи и H9
#18 by ШтушаКутуша
set sh=Thisworkbook.Worksheets(НомерИлиИмяТаблицы) ii = sh.Cells.SpecialCells(xlLastCell).Row jj = sh.Cells.SpecialCells(xlLastCell).Column
#19 by Babay
+ кур_яры с другого листа беруться а дальше как?
#20 by ШтушаКутуша
а чтобы менять "зараз" явно используй диапазон адресов в Range: sh.Range("A1:M100").Formula.....
#21 by smaharbA
Дак ты не спрашивай а посмотри что будет в счас и с годом сообразим
#22 by ШтушаКутуша
+18 for i=1 to ii      for j=1 to jj        ...............      next j    next i
#23 by smaharbA
+ год тоже сопряжен с номером ячейки как и В9/10/11/12... ?
#24 by smaharbA
Это не всегда так
#25 by Babay
Если ты про кур_яр, то да.
#26 by smaharbA
+ и уж если так то уж - for each c in sh.usedrange msgbox c.address next
#27 by smaharbA
адрес первой укажи
#28 by smaharbA
Set myrange = Worksheets.Range("a9:a100") myrange.FormulaLocal = "=ЕСЛИ(ДАТА(ГОД(ДАТАЗНАЧ(Лист2!B9))+34;МЕСЯЦ(ДАТАЗНАЧ(Лист2!B9));ДЕНЬ(ДАТАЗНАЧ(Лист2!B9)))>B9;0,005*H9;1)"
#29 by smaharbA
+ но ябы в массив все залил и тамже вычислил а потом из массива, действий ненамного более
#30 by Babay
, так будет и по не ненужной мне области, а мне нужно по его части, притом заранее не известно по какой (зависит от того, сколько введет пользователь "строк" и "столбцов")
#31 by smaharbA
Ты еще поди проверяешь заполненность ?
#32 by Babay
Я так изначально хотел, но не сумел в VBA слить в переменную значение даты из ячейки (типа "12.12.2003") и к ней прибавить год. Может подскажешь?
#33 by smaharbA
Ты пробовал ? а9:а100 это так для примера, можно перед этим найти заполненную область кода 4 строки
#34 by Babay
+ Мне самое главное сравнить две даты из двух разных ячеек и в зависимости от результата вставлять в ячейку значение
#35 by Babay
ты написал там "Лист2!B9", а мне это значение надо выдергивать из других ячеек
#36 by smaharbA
a = Worksheets.Range("c1:c10").Value MsgBox TypeName(a) For Each c In a MsgBox c + 10 Next
#37 by smaharbA
Дак и пропиши имя листа и первую ячейку, инкриментирует само
#38 by Babay
Спасибо smaharbA фишку FormulaLocal понял, завтра покручу, попробую А ты на не можешь ответить? Так хорошо бы было. ;)
#39 by smaharbA
см
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С