Привет всем. Небольшой вопрос возник при написании макроса и его тестировании.
В общем, есть файл с макросом для формирования разнообразных отчетов. Одной из составляющих частей макроса есть подпрограмма для автоматического форматирования отчет. Например, если строка входит в блок такой-то, то применить к ней стиль такой-то, формат чисел 0,00 и т.п.
Писал все это дело в Excel2016, а теперь на рабочем компе с Excel2013 получаю ошибку: Runtime Error 405: Wrong number of arguments or invalid prorerty assignment.
Как оказалось, ругается на это: .Style = "40% — акцент1" Потом заметил, что в Excel2013 этот же стандартный стиль называется чуть иначе: "40% - Акцент1" (через дефис и с заглавной А).
Если поправить везде, но работает нормально в Excel2013, но аналогично ругается более новый офис. С другими стилями "Заголовок 1", например, проблем не возникает.
Честно сказать, не часто стилями вообще пользуюсь, а в VBA и подавно. Может, упускаю что-то.
Посоветуйте, как мне этот дурацкий прикол с дефисом/тире заставить работать нормально и там, и там. Пока у меня две идеи есть: 1) создать копии 4 нужных стилей, присвоить нормальные имена и использовать их просто; 2) вынести присвоение названий стилей в отдельный блок и дописать условие: ЕСЛИ версияЭксель =13, ТО ..., ИНАЧЕ ...
Что надежней и практичней?
Привет всем. Небольшой вопрос возник при написании макроса и его тестировании.
В общем, есть файл с макросом для формирования разнообразных отчетов. Одной из составляющих частей макроса есть подпрограмма для автоматического форматирования отчет. Например, если строка входит в блок такой-то, то применить к ней стиль такой-то, формат чисел 0,00 и т.п.
Писал все это дело в Excel2016, а теперь на рабочем компе с Excel2013 получаю ошибку: Runtime Error 405: Wrong number of arguments or invalid prorerty assignment.
Как оказалось, ругается на это: .Style = "40% — акцент1" Потом заметил, что в Excel2013 этот же стандартный стиль называется чуть иначе: "40% - Акцент1" (через дефис и с заглавной А).
Если поправить везде, но работает нормально в Excel2013, но аналогично ругается более новый офис. С другими стилями "Заголовок 1", например, проблем не возникает.
Честно сказать, не часто стилями вообще пользуюсь, а в VBA и подавно. Может, упускаю что-то.
Посоветуйте, как мне этот дурацкий прикол с дефисом/тире заставить работать нормально и там, и там. Пока у меня две идеи есть: 1) создать копии 4 нужных стилей, присвоить нормальные имена и использовать их просто; 2) вынести присвоение названий стилей в отдельный блок и дописать условие: ЕСЛИ версияЭксель =13, ТО ..., ИНАЧЕ ...
К стилю можно обращаться не по имени, а по порядковому номеру ThisWorkbook.Styles(n) Список номеров с раскраской смотрите в файле Вынимаются они, например, вот так: [vba]
Код
Sub Макрос1() ' Application.ScreenUpdating = 0 n = 999'на самом деле их 47 On Error Resume Next For i = 1 To n Range("A" & i) = "Стиль №" & i & " - " & ThisWorkbook.Styles(i).NameLocal Range("A" & i).Style = ThisWorkbook.Styles(i) Next i MsgBox "Всё" End Sub
[/vba]
То есть, вместо [vba]
Код
.Style = "40% — акцент1"
[/vba]можно писать [vba]
Код
.Style = ThisWorkbook.Styles(7)
[/vba]
К стилю можно обращаться не по имени, а по порядковому номеру ThisWorkbook.Styles(n) Список номеров с раскраской смотрите в файле Вынимаются они, например, вот так: [vba]
Код
Sub Макрос1() ' Application.ScreenUpdating = 0 n = 999'на самом деле их 47 On Error Resume Next For i = 1 To n Range("A" & i) = "Стиль №" & i & " - " & ThisWorkbook.Styles(i).NameLocal Range("A" & i).Style = ThisWorkbook.Styles(i) Next i MsgBox "Всё" End Sub