Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Форматирование таблицы макросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Форматирование таблицы макросом (Макросы/Sub)
Форматирование таблицы макросом
light26 Дата: Пятница, 26.08.2011, 18:09 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет.
Мой первый неудачный опыт с макросами. В принципе, это вообще мой первый опыт с макросами )))
А первый блин, как известно, комом...
Имею файл с данными в экселевской таблице (см. вложение), который сформирован автоматически другой программой
В оригинале у книги 1 лист. Еще 2 добавил для примера. Так вот, 1 лист - то, что формирует программа. 2 лист - то, что получается, если задать одинаковую ширину столбцам и высоту строкам. 3 лист - то, что хотелось бы получить.
Решил последовать многочисленным советам начать изучение макросов с записи своего.
Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса, выделил 1 лист и выполнил записанный макрос. А он взялся матом ругаться (((. Я тело-то макроса открыл, а че толку - почти ничего не понимаю. Разобрался в процентах 10 строк. А мат начинается именно на этой строке
Код
Selection.Delete Shift:=xlToLeft

Че делать? Как? Почему?..
Вот прилагаю тело макроса. Полностью, как оно в окне VBA выглядит:
[vba]
Код
Sub Как_надо()
'
' Как_надо Макрос
'

'
          With Selection
              .HorizontalAlignment = xlGeneral
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = True
          End With
          Selection.UnMerge
          Range("I4:X4").Select
          With Selection
              .HorizontalAlignment = xlGeneral
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = True
          End With
          Selection.UnMerge
          Rows("1:1").RowHeight = 15.75
          Rows("1:25").Select
          Selection.RowHeight = 15
          Rows("9:9").Select
          Rows("9:9").EntireRow.AutoFit
          Columns("A:AG").Select
          Selection.ColumnWidth = 5
          Range("K2").Select
          Selection.Cut Destination:=Range("A2")
          Range("I4").Select
          Selection.Cut Destination:=Range("A4")
          Range("A4").Select
          ActiveCell.FormulaR1C1 = "За период"
          With ActiveCell.Characters(Start:=1, Length:=9).Font
              .Name = "Arial"
              .FontStyle = "обычный"
              .Size = 10
              .Strikethrough = False
              .Superscript = False
              .Subscript = False
              .OutlineFont = False
              .Shadow = False
              .Underline = xlUnderlineStyleNone
              .ColorIndex = 1
              .TintAndShade = 0
              .ThemeFont = xlThemeFontNone
          End With
          Range("C:C,G:G,I:I,K:K,M:M,Q:Q,U:U,W:W,Y:Y,AA:AA,AD:AD").Select
          Range("AD1").Activate
          Selection.Delete Shift:=xlToLeft
          Range("A2:V2").Select
          With Selection
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Selection.Merge
          Range("A4:V4").Select
          With Selection
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Selection.Merge
          Columns("A:A").EntireColumn.AutoFit
          Columns("B:B").EntireColumn.AutoFit
          Columns("C:C").EntireColumn.AutoFit
End Sub
[/vba]
P.S. Excel у меня 2007
К сообщению приложен файл: 7429301.xls (70.0 Kb)


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Пятница, 26.08.2011, 18:20
 
Ответить
СообщениеВсем привет.
Мой первый неудачный опыт с макросами. В принципе, это вообще мой первый опыт с макросами )))
А первый блин, как известно, комом...
Имею файл с данными в экселевской таблице (см. вложение), который сформирован автоматически другой программой
В оригинале у книги 1 лист. Еще 2 добавил для примера. Так вот, 1 лист - то, что формирует программа. 2 лист - то, что получается, если задать одинаковую ширину столбцам и высоту строкам. 3 лист - то, что хотелось бы получить.
Решил последовать многочисленным советам начать изучение макросов с записи своего.
Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса, выделил 1 лист и выполнил записанный макрос. А он взялся матом ругаться (((. Я тело-то макроса открыл, а че толку - почти ничего не понимаю. Разобрался в процентах 10 строк. А мат начинается именно на этой строке
Код
Selection.Delete Shift:=xlToLeft

Че делать? Как? Почему?..
Вот прилагаю тело макроса. Полностью, как оно в окне VBA выглядит:
[vba]
Код
Sub Как_надо()
'
' Как_надо Макрос
'

'
          With Selection
              .HorizontalAlignment = xlGeneral
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = True
          End With
          Selection.UnMerge
          Range("I4:X4").Select
          With Selection
              .HorizontalAlignment = xlGeneral
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = True
          End With
          Selection.UnMerge
          Rows("1:1").RowHeight = 15.75
          Rows("1:25").Select
          Selection.RowHeight = 15
          Rows("9:9").Select
          Rows("9:9").EntireRow.AutoFit
          Columns("A:AG").Select
          Selection.ColumnWidth = 5
          Range("K2").Select
          Selection.Cut Destination:=Range("A2")
          Range("I4").Select
          Selection.Cut Destination:=Range("A4")
          Range("A4").Select
          ActiveCell.FormulaR1C1 = "За период"
          With ActiveCell.Characters(Start:=1, Length:=9).Font
              .Name = "Arial"
              .FontStyle = "обычный"
              .Size = 10
              .Strikethrough = False
              .Superscript = False
              .Subscript = False
              .OutlineFont = False
              .Shadow = False
              .Underline = xlUnderlineStyleNone
              .ColorIndex = 1
              .TintAndShade = 0
              .ThemeFont = xlThemeFontNone
          End With
          Range("C:C,G:G,I:I,K:K,M:M,Q:Q,U:U,W:W,Y:Y,AA:AA,AD:AD").Select
          Range("AD1").Activate
          Selection.Delete Shift:=xlToLeft
          Range("A2:V2").Select
          With Selection
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Selection.Merge
          Range("A4:V4").Select
          With Selection
              .HorizontalAlignment = xlCenter
              .VerticalAlignment = xlTop
              .WrapText = True
              .Orientation = 0
              .AddIndent = False
              .IndentLevel = 0
              .ShrinkToFit = False
              .ReadingOrder = xlContext
              .MergeCells = False
          End With
          Selection.Merge
          Columns("A:A").EntireColumn.AutoFit
          Columns("B:B").EntireColumn.AutoFit
          Columns("C:C").EntireColumn.AutoFit
End Sub
[/vba]
P.S. Excel у меня 2007

Автор - light26
Дата добавления - 26.08.2011 в 18:09
RAN Дата: Пятница, 26.08.2011, 23:13 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
То, что этот макрос ругается, не удивительно.
Удивительно, как такой макрос записать удалось? surprised


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТо, что этот макрос ругается, не удивительно.
Удивительно, как такой макрос записать удалось? surprised

Автор - RAN
Дата добавления - 26.08.2011 в 23:13
_Boroda_ Дата: Суббота, 27.08.2011, 00:02 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Посмотри такой вариант.
Спациально на стал никаких извращение-хитростей делать, чтобы понятнее было.
[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
К сообщению приложен файл: 7429301_.xls (59.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПосмотри такой вариант.
Спациально на стал никаких извращение-хитростей делать, чтобы понятнее было.
[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_
Дата добавления - 27.08.2011 в 00:02
light26 Дата: Суббота, 27.08.2011, 12:54 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (RAN)
Удивительно, как такой макрос записать удалось?

Quote (light26)
Решил последовать многочисленным советам начать изучение макросов с записи своего.
Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса,

RAN, я его не сам писал. Его писал Excel или VBA. Кто там из них за это отвечает...)))
Так в чем же, все-таки, косяк?!


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Суббота, 27.08.2011, 12:56
 
Ответить
Сообщение
Quote (RAN)
Удивительно, как такой макрос записать удалось?

Quote (light26)
Решил последовать многочисленным советам начать изучение макросов с записи своего.
Включил запись, отформатировал последовательно таблицу,-привел ее в тот вид, который меня устраивает,-остановил запись макроса,

RAN, я его не сам писал. Его писал Excel или VBA. Кто там из них за это отвечает...)))
Так в чем же, все-таки, косяк?!

Автор - light26
Дата добавления - 27.08.2011 в 12:54
light26 Дата: Суббота, 27.08.2011, 13:01 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (_Boroda_)
'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно

Да там смысел не в том, чтобы задать определенную ширину/высоту столбцов/строк, а в том, чтобы удалить все лишнее. Привести таблицу в "божеский вид" )


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (_Boroda_)
'c_ = Cells(10, Columns.Count).End(xlToLeft).Column'кол-во столбцов (у нас вроде постоянно

Да там смысел не в том, чтобы задать определенную ширину/высоту столбцов/строк, а в том, чтобы удалить все лишнее. Привести таблицу в "божеский вид" )

Автор - light26
Дата добавления - 27.08.2011 в 13:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Форматирование таблицы макросом (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!