Всем привет. Мой первый неудачный опыт с макросами. В принципе, это вообще мой первый опыт с макросами ))) А первый блин, как известно, комом... Имею файл с данными в экселевской таблице (см. вложение), который сформирован автоматически другой программой В оригинале у книги 1 лист. Еще 2 добавил для примера. Так вот, 1 лист - то, что формирует программа. 2 лист - то, что получается, если задать одинаковую ширину столбцам и высоту строкам. 3 лист - то, что хотелось бы получить. Решил последовать многочисленным советам начать изучение макросов с записи своего. Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса, выделил 1 лист и выполнил записанный макрос. А он взялся матом ругаться (((. Я тело-то макроса открыл, а че толку - почти ничего не понимаю. Разобрался в процентах 10 строк. А мат начинается именно на этой строке
Код
Selection.Delete Shift:=xlToLeft
Че делать? Как? Почему?.. Вот прилагаю тело макроса. Полностью, как оно в окне VBA выглядит: [vba]
Всем привет. Мой первый неудачный опыт с макросами. В принципе, это вообще мой первый опыт с макросами ))) А первый блин, как известно, комом... Имею файл с данными в экселевской таблице (см. вложение), который сформирован автоматически другой программой В оригинале у книги 1 лист. Еще 2 добавил для примера. Так вот, 1 лист - то, что формирует программа. 2 лист - то, что получается, если задать одинаковую ширину столбцам и высоту строкам. 3 лист - то, что хотелось бы получить. Решил последовать многочисленным советам начать изучение макросов с записи своего. Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса, выделил 1 лист и выполнил записанный макрос. А он взялся матом ругаться (((. Я тело-то макроса открыл, а че толку - почти ничего не понимаю. Разобрался в процентах 10 строк. А мат начинается именно на этой строке
Код
Selection.Delete Shift:=xlToLeft
Че делать? Как? Почему?.. Вот прилагаю тело макроса. Полностью, как оно в окне VBA выглядит: [vba]
Посмотри такой вариант. Спациально на стал никаких извращение-хитростей делать, чтобы понятнее было. [vba]
Код
Sub Макрос1() Application.ScreenUpdating = 0 'отключить обновление экрана (чтобы не моргало) r_ = Range("A" & Rows.Count).End(xlUp).Row 'кол-во строк 'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно) Range("A2:AG4").Merge True 'объединить A2:AG4 по строкам Rows("1:5").UnMerge 'убрать объединение в строках 1-5 Range(Range("A9"), ActiveCell.SpecialCells(xlLastCell)).UnMerge 'убрать объединение в ячейках от А9 и до конца таблицы For i = 33 To 2 Step -1 'цикл от последнего столбца таблицы до второго If Cells(10, i) = "" Then Columns(i).Delete 'если в строке 10 столбца ничего нет - удалить столбец Next 'конец цикла Range("A2:V4").Merge True 'объединить A2:V4 по строкам Range("D1:V1").ColumnWidth = 5 'установить ширину столбцов Range("C1").ColumnWidth = 6.57 Range("B1").ColumnWidth = 5.43 Rows("5").Delete 'убить строку 5 Range("A1:A" & r_).RowHeight = 15 ' установить высоту строк Range("A8").RowHeight = 26.25 Application.ScreenUpdating = 1 'включить обновление экрана End Sub
[/vba] Вроде итог такой же, как должен быть, правда там еще надо бы кое что поделать, например в ячейках G5 и R5
Посмотри такой вариант. Спациально на стал никаких извращение-хитростей делать, чтобы понятнее было. [vba]
Код
Sub Макрос1() Application.ScreenUpdating = 0 'отключить обновление экрана (чтобы не моргало) r_ = Range("A" & Rows.Count).End(xlUp).Row 'кол-во строк 'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно) Range("A2:AG4").Merge True 'объединить A2:AG4 по строкам Rows("1:5").UnMerge 'убрать объединение в строках 1-5 Range(Range("A9"), ActiveCell.SpecialCells(xlLastCell)).UnMerge 'убрать объединение в ячейках от А9 и до конца таблицы For i = 33 To 2 Step -1 'цикл от последнего столбца таблицы до второго If Cells(10, i) = "" Then Columns(i).Delete 'если в строке 10 столбца ничего нет - удалить столбец Next 'конец цикла Range("A2:V4").Merge True 'объединить A2:V4 по строкам Range("D1:V1").ColumnWidth = 5 'установить ширину столбцов Range("C1").ColumnWidth = 6.57 Range("B1").ColumnWidth = 5.43 Rows("5").Delete 'убить строку 5 Range("A1:A" & r_).RowHeight = 15 ' установить высоту строк Range("A8").RowHeight = 26.25 Application.ScreenUpdating = 1 'включить обновление экрана End Sub
[/vba] Вроде итог такой же, как должен быть, правда там еще надо бы кое что поделать, например в ячейках G5 и R5_Boroda_
Решил последовать многочисленным советам начать изучение макросов с записи своего. Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса,
RAN, я его не сам писал. Его писал Excel или VBA. Кто там из них за это отвечает...))) Так в чем же, все-таки, косяк?!
Quote (RAN)
Удивительно, как такой макрос записать удалось?
Quote (light26)
Решил последовать многочисленным советам начать изучение макросов с записи своего. Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса,
RAN, я его не сам писал. Его писал Excel или VBA. Кто там из них за это отвечает...))) Так в чем же, все-таки, косяк?!light26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Суббота, 27.08.2011, 12:56
'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно
Да там смысел не в том, чтобы задать определенную ширину/высоту столбцов/строк, а в том, чтобы удалить все лишнее. Привести таблицу в "божеский вид" )
Quote (_Boroda_)
'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно
Да там смысел не в том, чтобы задать определенную ширину/высоту столбцов/строк, а в том, чтобы удалить все лишнее. Привести таблицу в "божеский вид" )light26