Страницы: 1
RSS
Вопрос по VBA. Вывод в поле msgbox текста нескольких ячеек.
 
Здравствуйте,  
 
помогите пожалуйста со следующей задачей:    
 
есть столбец, в нём в определённых ячейках содержится текст (на основе формулы, объединяет нескольких ячеек в строке по условиям -это уже всё есть, просто для понимания что в ячейках формулы).    
Очень хотелось бы при открытии книги или при переключении листа (на каждом листе соответственно нужно) выводилось окно с сообщение,в теле которого был последовательно текст из всех не пустых ячеек этого столбца. (таких ячеек не очень много будет, текста соответственно тоже, можно даже текст ячеек друг по друга)  
 
Заранее спасибо, отдельными кусками получается, а вот поиск всех ячеек и перенос в поле сообщения не выходит(
 
без примера долго будете ждать ответ.  
На всякий случай соединить для сообщения значения например двух ячеек можно так :  
MsgBox [A1] & [A2]
Редко но метко ...
 
Так?  
 
Sub tt()  
Dim a(), b, s$  
a = [a1:a100].Value
b = Application.Transpose(a)  
s = Application.Trim(Join(b))  
s = Replace(s, " ", vbLf)  
MsgBox s  
End Sub
 
Hugo, спасибо большое, очень близко к тому что хотел)    
сначала VBA поругался на Sub tt() - зачем кстати это? я убрал и ошибка ушла.
 
Как это зачем? :)  
Ещё такой вариант, если в ячейках возможны пробелы.  
Какой-то длинный путь, но короче что-то не получилось.  
Без Sub tt(), раз уж лишним оказалось :)  
 
   Dim a(), b, s$  
   a = [a1:a100].Value
   b = Application.Transpose(a)  
   s = Join(b, "|")  
   s = Replace(s, " ", "$%&")  
   s = Replace(s, "|", " ")  
   s = Application.Trim(s)  
   s = Replace(s, " ", vbLf)  
   s = Replace(s, "$%&", " ")  
   MsgBox s
 
Огромное спасибо и за второй пример,как раз пытался понять как оставить пробелы внутри ячейки :)    
про Sub tt вопрос был не просто так!) я уже после того как залез в хелп понял, что  у меня уже было написано Sub Workbook_Open() :P и что то подозрительно похожи.  
А можно попросить, если не очень затруднит, логику процесса объяснить?  
Насколько я понимаю, мы задаем диапазон ячеек и все их последовательно склеиваем?  
Replace призван в роли "enter" ?)
 
Логика такая - берём данные в массив, его превращаем в одномерный, чтоб можно склеить в одну строку с помощью Join.  
Склеиваем с разделителем "|", но получаем "слово|||||слово слово||||"  
Заменяем пробелы на "$%&", "|" на пробелы, множественные пробелы заменяем на один с помощью  Application.Trim, заменяем пробелы на перевод строки, а "$%&" назад на пробелы. Уф...  
Кажется, можно сделать проще - но что-то ничего проще не придумалось.
 
Спасибо огромное!  
Мне кажется альтернативным путём может быть только поиск не пустых ячеек в диапазоне и их склейка или же некий цикл, который берет по очереди каждую  ячейку в столбце и склеивает с предыдущей.  
Мне ваш вариант очень по душе)
 
Да, циклом может быть и проще. Но банально :)
 
Блин( в концовке всё таки не выходит - вот код:  
 
Private Sub Workbook_Open()  
Dim a(), b, s$  
a = [K1:K1000].Value
b = Application.Transpose(a)  
s = Join(b, "|")  
s = Replace(s, " ", "$%&")  
s = Replace(s, "|", " ")  
s = Application.Trim(s)  
s = Replace(s, " ", vbLf)  
s = Replace(s, "$%&", " ")  
MsgBox s, 48, "Íîìåðà ñòðîê ñ äîãîâîðàìè ñî ñðîêîì ìåíåå 30 äíåé          "  
End Sub  
Private Sub Worksheet_Activate()  
Dim a(), b, s$  
a = [K1:K1000].Value
b = Application.Transpose(a)  
s = Join(b, "|")  
s = Replace(s, " ", "$%&")  
s = Replace(s, "|", " ")  
s = Application.Trim(s)  
s = Replace(s, " ", vbLf)  
s = Replace(s, "$%&", " ")  
MsgBox s, 48, "Íîìåðà ñòðîê ñ äîãîâîðàìè ñî ñðîêîì ìåíåå 30 äíåé          "  
End Sub  
Что именно нужно изменить,чтобы и при открытии и при изменении листа выскакивало окошко?((
 
Да ничего не нужно, все работает!  
Правда в экран убирается только 60 строк из тысячи, и скролить нельзя...))  
Но это мелочи..))
 
Было сказано:  
(таких ячеек не очень много будет, текста соответственно тоже, можно даже текст ячеек друг по друга)  
 
Я не вполне понял, что такое "друг по друга", но по сути это не меняет сути - можно форму показывать с текстбоксом и скроллбаром.
 
"друг под друга" - но это итак есть! )  
а у меня не работает при смене листа почему то =\ не выскакивает окошко...
Страницы: 1
Читают тему
Наверх