VBA в Excel

vitaly3000

Местный
Регистрация
6 Сен 2004
Сообщения
46
Реакции
3
Credits
76
Помогите разобраться с таким вопросом.

В VBA вообще ни бум-бум. Так что вопрос простой.

Есть текст в ячейке таблицы. По Alt+Enter я могу его разбить на несколько строк в пределах одной ячейки. Как это сделать средствами VBA? То есть какой макрос надо написать, чтобы в большой таблице преобразовать однотипные ячейки.

Например, у меня есть столбец ФИО - там данные расположены в строчку таким образом:
фамилия_имя_отчество.

Надо, чтобы было в столбец так:
фамилия
имя
отчество
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Просто вставь перевод строки.
Например:
Dim sh As Excel.Worksheet
Set sh = ActiveSheet
sh.Cells(1, 1) = "qwe" & Chr(10) & "asd"

В ячейке будет:
qwe
asd
 

vitaly3000

Местный
Регистрация
6 Сен 2004
Сообщения
46
Реакции
3
Credits
76
ploki написал(а):
Просто вставь перевод строки.
Например:
Dim sh As Excel.Worksheet
Set sh = ActiveSheet
sh.Cells(1, 1) = "qwe" & Chr(10) & "asd"

В ячейке будет:
qwe
asd

Спасибо, но как же именно разбить строку, которая уже есть в этой ячейке? Как выглядит функция замены подстроки в строке (которая, например, все пробелы в строке заменит переводами строки)?
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Replace(expression, find, replace[, start[, count[, compare]]])

Например:
Dim sh As Excel.Worksheet
Dim st As String

Set sh = ActiveSheet
st = sh.Cells(1, 1)
st = Replace(st, " ", Chr(10))
sh.Cells(1, 1) = st
 
Последнее редактирование модератором:

vitaly3000

Местный
Регистрация
6 Сен 2004
Сообщения
46
Реакции
3
Credits
76
Спасибо ploki!

Я уже нашел эту функцию и вставил ее в рабочую книгу Excel таким образом:

Dim sh As Excel.Worksheet
Set sh = ActiveSheet

For nCounter = 1 To ПоследняяСтрока Step 1
sh.Cells(nCounter, 2) = Replace(sh.Cells(nCounter, 1), " ", Chr(10))
Next


Сформировал отдельный столбик значений, отформатированных нужным образом.
 
F

ffantasm

В VВА есть стандартная функция SPLIT("исходная строка","разделитель")
получишь массивю Выглядит это так.
txt="Привет с большого бадуна"
str=split(txt," ")
получаешь массив str(), где:
str(0)="Привет"
str(1)="с"
str(2)="большого"
str(3)="бадуна"
Чтобы объеденить -> функ. JOIN - синтаксис такой же.
 

vitaly3000

Местный
Регистрация
6 Сен 2004
Сообщения
46
Реакции
3
Credits
76
ffantasm написал(а):
В VВА есть стандартная функция SPLIT("исходная строка","разделитель")
Чтобы объеденить -> функ. JOIN - синтаксис такой же.

Спасибо за полезную информацию, ffantasm! Если бы знал это месяц назад, то не было бы проблем с решением другой проблемы по формированию простенькой БД в txt формате :) Сейчас задачи изменились и мне проще использовать xml.
 
Последнее редактирование модератором:

S.F.W.

Местный
Регистрация
16 Апр 2004
Сообщения
178
Реакции
118
Credits
0
Такой вопрос :
Есть ли в VBA для Excel такая штука как выполнения макроса при закрытии и открытии книги .

Смысл в чем:
Человеку открывающему файл листы которые ему не нужны прячутся, он жмакается кнопа выбирающая тип работы с файлом, в зависимости от нажатия визибл присваивается нужным листам.
При закрытии все листы становятся визибл.

Такой фишки как workbook.oncreate workbook.onopen workbook.onclose не нашел :((
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Private Sub Workbook_Open()
===Текст макроса.===
End Sub
 

S.F.W.

Местный
Регистрация
16 Апр 2004
Сообщения
178
Реакции
118
Credits
0
Добавил макрос в модуль пустой книги, открываю , закрываю книгу ничего не происходит, макрос не срабатывает.
Тестовый макро такой

Private Sub Workbook_Open()
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Do you want to continue ?" ' Define message.
Style = vbYesNo + vbCritical + vbDefaultButton2 ' Define buttons.
Title = "MsgBox Demonstration" ' Define title.
Help = "DEMO.HLP" ' Define Help file.
Ctxt = 1000 ' Define topic
' context.
' Display message.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' User chose Yes.
MyString = "Yes" ' Perform some action.
Else ' User chose No.
MyString = "No" ' Perform some action.
End If
End Sub
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Возможно, отключены макросы.
 

S.F.W.

Местный
Регистрация
16 Апр 2004
Сообщения
178
Реакции
118
Credits
0
Да нет. Макросы включены сто процентов... Блин таки нет решения... Жаль
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Ну а пошаговое выполнение что дает? Может в самом макросе чушь написана )))
 

Wern

Турист
Регистрация
10 Янв 2007
Сообщения
21
Реакции
2
Credits
42
Процедура где находится? в модуле объекта книга
Microsoft Excel objects/ThisWorkbook(ЭтаКнига)?
или в модулях книги?
Modules/Module1?
Должна быть в модуле объекта
 

S.F.W.

Местный
Регистрация
16 Апр 2004
Сообщения
178
Реакции
118
Credits
0
Сработало ! Не туда засунул , спасибо аграменнейшее!