Страницы: 1
RSS
Специальные символы в VBA
 
Подскажите пожалуйста, как вставить из кода VBA в сообщение символы:  
1) конца каретки  
2) "  
 
Раньше както делал, но забыл:( Немогу никак найти.
 
MsgBox "Первый" & Chr(10) & "Второй" & " " & """"
 
Вместо Chr(10) можно vbCrLf
 
Большое спасибо!
 
А как задать конец строки в формулу для ячейки:  
 
="Супермаркет"& "конец строки" &    
'Лист1'!$F$4 & "конец строки"  
'Лист1'!$G$4 & "конец строки"  
'Лист1'!$H$4  
 
пробовал СИМВОЛ(10), не получается
 
На ячейке с формулой нажать правую кнопку мышки - "Формат ячеек" - вкладка "Выравнивание" - установить флажок "Переносить по словам". Тогда формула с СИМВОЛ(10) сработает.
 
{quote}{login=ZVI}{date=21.12.2009 03:39}{thema=}{post}На ячейке с формулой нажать правую кнопку мышки - "Формат ячеек" - вкладка "Выравнивание" - установить флажок "Переносить по словам". Тогда формула с СИМВОЛ(10) сработает.{/post}{/quote}  
 
Точно! Получилось. Совсем забыл об этом.  
 
Но если у пользователя окажется английская версия, а я туда впишу программно наше русское - СИМВОЛ(10)  
 
Можно ли использовать подобные формулы альтернативным, какимто независимом от языка способом?
 
1. Включите макрорекодер  
2. Впишите в ячейку формулу =СИМВОЛ(10)  
3. Выключите макрорекодер и посмотрите что он записал вместо "=СИМВОЛ(10)"  
4. Вот это и нужно прописывать в VBA.
 
Если нужно из VBA записать в ячейку не формулу, а значения, тогда такой вариант:  
 
Sub Test()  
 With Range("A1")  
   .WrapText = True  
   .Value = "Супермаркет" & vbLf & [Лист1!F4] & vbLf & [Лист1!G4] & vbLf & [Лист1!H4]
 End With  
End Sub
 
{quote}{login=ZVI}{date=21.12.2009 04:37}{thema=}{post}Если нужно из VBA записать в ячейку не формулу, а значения, тогда такой вариант:  
 
Sub Test()  
 With Range("A1")  
   .WrapText = True  
   .Value = "Супермаркет" & vbLf & [Лист1!F4] & vbLf & [Лист1!G4] & vbLf & [Лист1!H4]
 End With  
End Sub{/post}{/quote}  
 
Необходимо именно формулу записать. Значение в ячейке, куда записываем, должно меняться вместе со значением ячейки, на которую ссылаемся.  
 
И кстати пробовал писать  
.cells(i,j).Formula = "=Супермаркет" & ....  
сама формула в ячейку записывается, но не пересчитывается ее значение (видим #ИМЯ?)  
 
пробовал писать:  
.cells(i,j).Calculate  
не помогает  
 
но формула правильная. Выбираю ячейку для редактирования, ничего не меняю, нажимаю Enter и только тогда появляется необходимое значение.
 
1. Супермаркет - это именованый диапазон?  
2. Как выглядит полностью формула в ячейке? - Запишите её вручную в ячейку, убедитесь, что она работает, и скопируйте её сюда.  
Реально помогает, если посмотреть в код, котолрый при этом записывает макрорекодер.
 
{quote}{login=ZVI}{date=21.12.2009 04:08}{thema=}{post}1. Включите макрорекодер  
2. Впишите в ячейку формулу =СИМВОЛ(10)  
3. Выключите макрорекодер и посмотрите что он записал вместо "=СИМВОЛ(10)"  
4. Вот это и нужно прописывать в VBA.{/post}{/quote}  
 
Не нашел макрорекодер, написал его сам:  
 
MsgBox selection.formula  
 
кстати написал вместо =СИМВОЛ(10) формулу =CHAR(10) и все стало нормально работать
 
Понятно. Найдите макрорекодер обязательно, это упростит Вам работу с VBA.  
Кнопка макрорекодера находится на панели Visual Basic,  панель добавляется из меню Вид - Панели инструментов - Visual Basic.  
В Excel 2007 кнопка макрорекодера (Запись макроса) находится на вкладке Разработчик, эта вкладка добавляется на ленту с кнопки Office - Параметры Excel - Основные - Показывать вкладку Разработчик на ленте.  
 
Для истории:  
 
' Если "Супермаркет" - это текст (слово)  
Sub Test1()  
 With Range("A1")  
   .WrapText = True  
   .Formula = "=""Супермаркет"" & CHAR(10) & Лист1!$F$4 & CHAR(10) & Лист1!$G$4 & CHAR(10) &  Лист1!$H$4"  
 End With  
End Sub  
 
' Если Супермаркет - это именованный диапазон  
Sub Test2()  
 With Range("A1")  
   .WrapText = True  
   .Formula = "=Супермаркет & CHAR(10) & Лист1!$F$4 & CHAR(10) & Лист1!$G$4 & CHAR(10) &  Лист1!$H$4"  
 End With  
End Sub
 
{quote}{login=ZVI}{date=21.12.2009 06:02}{thema=}{post}Понятно. Найдите макрорекодер обязательно, это упростит Вам работу с VBA.  
Кнопка макрорекодера находится на панели Visual Basic,  панель добавляется из меню Вид - Панели инструментов - Visual Basic.  
В Excel 2007 кнопка макрорекодера (Запись макроса) находится на вкладке Разработчик, эта вкладка добавляется на ленту с кнопки Office - Параметры Excel - Основные - Показывать вкладку Разработчик на ленте.  
 
Для истории:  
 
' Если "Супермаркет" - это текст (слово)  
Sub Test1()  
 With Range("A1")  
   .WrapText = True  
   .Formula = "=""Супермаркет"" & CHAR(10) & Лист1!$F$4 & CHAR(10) & Лист1!$G$4 & CHAR(10) &  Лист1!$H$4"  
 End With  
End Sub  
 
' Если Супермаркет - это именованный диапазон  
Sub Test2()  
 With Range("A1")  
   .WrapText = True  
   .Formula = "=Супермаркет & CHAR(10) & Лист1!$F$4 & CHAR(10) & Лист1!$G$4 & CHAR(10) &  Лист1!$H$4"  
 End With  
End Sub{/post}{/quote}  
 
если так пойдет, то хорошо, а то я тут чето намудрил (но зато работает)  
...  
 endLine = " & CHAR(10) & "  
 sheetName = "'" & sheetShops.name & "'!"  
 parentName = ""  
   
 With sheetShops  
     col = 1  
     For i = g_row_firstDataRow To g_row_lastDataRow  
         If .Cells(i, g_col_level).Value = 1 Then  
             shopNameFormula = "= " & """" & parentName & """" & _  
                               endLine & """" & "'" & """" & " & " & _  
                               sheetName & _  
                               .Cells(i, g_col_shop).Address & " & " & """" & "'" & """" & endLine & _  
                               sheetName & _  
                               .Cells(i, g_col_city).Address & endLine & _  
                               sheetName & _  
                               .Cells(i, g_col_address).Address  
               
               
             ID = .Cells(i, g_col_ID).Value  
             IDParent = .Cells(i, g_col_IDParent).Value  
             isChusen = .Cells(i, g_col_isChusen).Value  
               
             sheetProducts.addShop col, _  
                                   shopNameFormula, _  
                                   ID, _  
                                   IDParent, _  
                                   isChusen  
             col = col + 1  
         Else  
           parentName = Cells(i, g_col_shop).Value  
         End If  
     Next i  
 End With  
 
Я здесь строки из одной таблицы делаю столбцами другой
 
Ой! Чето сложновато получилось. В результате получается формула:  
 
= "Супермаркет" & СИМВОЛ(10) & "'" & 'Торгові точки'!$F$4 & "'" & СИМВОЛ(10) & 'Торгові точки'!$G$4 & СИМВОЛ(10) & 'Торгові точки'!$H$4
 
{quote}{login=uaAndriy}{date=21.12.2009 07:01}{thema=}{post}Ой! Чето сложновато получилось. В результате получается формула:  
 
= "Супермаркет" & СИМВОЛ(10) & "'" & 'Торгові точки'!$F$4 & "'" & СИМВОЛ(10) & 'Торгові точки'!$G$4 & СИМВОЛ(10) & 'Торгові точки'!$H$4{/post}{/quote}  
 
Sub Test3()  
 Dim LF, Sh, Qt, Fm  
 LF = "&CHAR(10)"  
 Sh = "&'Торгові точки'!"  
 Qt = "&""'"""  
 Fm = "=""Супермаркет""" & LF & Qt & Sh & "$F$4" & Qt & LF & Sh & "$G$4" & LF & Sh & "$H$4"  
 Debug.Print Fm  
 With Range("A1")  
   .WrapText = True  
   .Formula = Fm  
 End With  
End Sub
 
{quote}{login=ZVI}{date=21.12.2009 01:28}{thema=Re: }{post}{quote}{login=uaAndriy}{date=21.12.2009 07:01}{thema=}{post}Ой! Чето сложновато получилось. В результате получается формула:  
 
= "Супермаркет" & СИМВОЛ(10) & "'" & 'Торгові точки'!$F$4 & "'" & СИМВОЛ(10) & 'Торгові точки'!$G$4 & СИМВОЛ(10) & 'Торгові точки'!$H$4{/post}{/quote}  
 
Sub Test3()  
 Dim LF, Sh, Qt, Fm  
 LF = "&CHAR(10)"  
 Sh = "&'Торгові точки'!"  
 Qt = "&""'"""  
 Fm = "=""Супермаркет""" & LF & Qt & Sh & "$F$4" & Qt & LF & Sh & "$G$4" & LF & Sh & "$H$4"  
 Debug.Print Fm  
 With Range("A1")  
   .WrapText = True  
   .Formula = Fm  
 End With  
End Sub{/post}{/quote}  
 
Спасибо!
Страницы: 1
Читают тему
Наверх