Выполнить макрос на листах c именами из столбца
fijer
Дата: Воскресенье, 04.02.2018, 21:47 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Необходимо выполнить макрос на неопределенном кол-ве листов, имена которых берутся из столбца таблицы:[vba]Код
Sub Update_() Dim NAMES As Variant NAMES = Application.Transpose(Sheets("Лист1").Range("Таблица1[Столбец1]").Value) 'MsgBox NAMES(2) For i = 0 To UBound(NAMES) With Sheets(NAMES(i)) Columns("C:D").Select Selection.ColumnWidth = 28 End With Next End Sub
[/vba]Ругается на With Sheets(NAMES(i))
Необходимо выполнить макрос на неопределенном кол-ве листов, имена которых берутся из столбца таблицы:[vba]Код
Sub Update_() Dim NAMES As Variant NAMES = Application.Transpose(Sheets("Лист1").Range("Таблица1[Столбец1]").Value) 'MsgBox NAMES(2) For i = 0 To UBound(NAMES) With Sheets(NAMES(i)) Columns("C:D").Select Selection.ColumnWidth = 28 End With Next End Sub
[/vba]Ругается на With Sheets(NAMES(i)) fijer
Сообщение отредактировал fijer - Воскресенье, 04.02.2018, 21:49
Ответить
Сообщение Необходимо выполнить макрос на неопределенном кол-ве листов, имена которых берутся из столбца таблицы:[vba]Код
Sub Update_() Dim NAMES As Variant NAMES = Application.Transpose(Sheets("Лист1").Range("Таблица1[Столбец1]").Value) 'MsgBox NAMES(2) For i = 0 To UBound(NAMES) With Sheets(NAMES(i)) Columns("C:D").Select Selection.ColumnWidth = 28 End With Next End Sub
[/vba]Ругается на With Sheets(NAMES(i)) Автор - fijer Дата добавления - 04.02.2018 в 21:47
Pelena
Дата: Воскресенье, 04.02.2018, 22:46 |
Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19179
Репутация:
4419
±
Замечаний:
±
Excel 365 & Mac Excel
Так попробуйте [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) .Columns("C:D").ColumnWidth = 28 End With Next
[/vba]
Так попробуйте [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) .Columns("C:D").ColumnWidth = 28 End With Next
[/vba] Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Так попробуйте [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) .Columns("C:D").ColumnWidth = 28 End With Next
[/vba] Автор - Pelena Дата добавления - 04.02.2018 в 22:46
fijer
Дата: Воскресенье, 04.02.2018, 23:56 |
Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Pelena , спасибо! Но можно ли переделать это так, чтобы я мог использовать те макросы, которые я запишу через "Запись Макроса". То есть чтобы я мог скопировать/вставить нужное мне действие и оно распространилось на все страницы NAMES.
Pelena , спасибо! Но можно ли переделать это так, чтобы я мог использовать те макросы, которые я запишу через "Запись Макроса". То есть чтобы я мог скопировать/вставить нужное мне действие и оно распространилось на все страницы NAMES.fijer
Ответить
Сообщение Pelena , спасибо! Но можно ли переделать это так, чтобы я мог использовать те макросы, которые я запишу через "Запись Макроса". То есть чтобы я мог скопировать/вставить нужное мне действие и оно распространилось на все страницы NAMES.Автор - fijer Дата добавления - 04.02.2018 в 23:56
gling
Дата: Понедельник, 05.02.2018, 00:07 |
Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2521
Репутация:
677
±
Замечаний:
0% ±
2010
Вместо этого[vba]Код
.Columns("C:D").ColumnWidth = 28
[/vba]или ниже, впишите название макроса, а лучше весь макрос, и посмотрите что получится.
Вместо этого[vba]Код
.Columns("C:D").ColumnWidth = 28
[/vba]или ниже, впишите название макроса, а лучше весь макрос, и посмотрите что получится. gling
ЯД-41001506838083
Сообщение отредактировал gling - Понедельник, 05.02.2018, 00:10
Ответить
Сообщение Вместо этого[vba]Код
.Columns("C:D").ColumnWidth = 28
[/vba]или ниже, впишите название макроса, а лучше весь макрос, и посмотрите что получится. Автор - gling Дата добавления - 05.02.2018 в 00:07
fijer
Дата: Понедельник, 05.02.2018, 00:14 |
Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
впишите название макроса, а лучше весь макрос, и посмотрите что получится.
Да я уже попробовал. Некоторые простые работают как например: [vba]Код
.Range("U7") = .Range("U6")
[/vba] А вот что делать тут например я не понял, пытался обращаться к ячейкам как и выше (через точку), не вышло: [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Wallets" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = False End With
[/vba] Поясню, просто у меня 2 цели. Если первая более конкретная, под которую я код напишу и могу забыть. То вторая, как раз иметь возможность быстро записать макрос с нужными изменениями и так же быстро применить это к пару десяткам однотипных страниц.
впишите название макроса, а лучше весь макрос, и посмотрите что получится.
Да я уже попробовал. Некоторые простые работают как например: [vba]Код
.Range("U7") = .Range("U6")
[/vba] А вот что делать тут например я не понял, пытался обращаться к ячейкам как и выше (через точку), не вышло: [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Wallets" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = False End With
[/vba] Поясню, просто у меня 2 цели. Если первая более конкретная, под которую я код напишу и могу забыть. То вторая, как раз иметь возможность быстро записать макрос с нужными изменениями и так же быстро применить это к пару десяткам однотипных страниц.fijer
Сообщение отредактировал fijer - Понедельник, 05.02.2018, 00:20
Ответить
Сообщение впишите название макроса, а лучше весь макрос, и посмотрите что получится.
Да я уже попробовал. Некоторые простые работают как например: [vba]Код
.Range("U7") = .Range("U6")
[/vba] А вот что делать тут например я не понял, пытался обращаться к ячейкам как и выше (через точку), не вышло: [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Wallets" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = False End With
[/vba] Поясню, просто у меня 2 цели. Если первая более конкретная, под которую я код напишу и могу забыть. То вторая, как раз иметь возможность быстро записать макрос с нужными изменениями и так же быстро применить это к пару десяткам однотипных страниц.Автор - fijer Дата добавления - 05.02.2018 в 00:14
gling
Дата: Понедельник, 05.02.2018, 00:31 |
Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2521
Репутация:
677
±
Замечаний:
0% ±
2010
Код не полный, не понятно что там выше написано. А пока ошибка [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select
[/vba]Range(..... на каком листе? Лучше макрос показывать в файле, там видно и весь макрос и данные на листе. Более понятно становится когда увидишь что от куда и куда. Лишние данные из файла -примера лучше удалить, чтобы не отвлекали от конкретной задачи.
Код не полный, не понятно что там выше написано. А пока ошибка [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select
[/vba]Range(..... на каком листе? Лучше макрос показывать в файле, там видно и весь макрос и данные на листе. Более понятно становится когда увидишь что от куда и куда. Лишние данные из файла -примера лучше удалить, чтобы не отвлекали от конкретной задачи. gling
ЯД-41001506838083
Ответить
Сообщение Код не полный, не понятно что там выше написано. А пока ошибка [vba]Код
NEWNAME = Range("O15") Range("Table_" & NEWNAME & "_Wallets[Тип]").Select
[/vba]Range(..... на каком листе? Лучше макрос показывать в файле, там видно и весь макрос и данные на листе. Более понятно становится когда увидишь что от куда и куда. Лишние данные из файла -примера лучше удалить, чтобы не отвлекали от конкретной задачи. Автор - gling Дата добавления - 05.02.2018 в 00:31
fijer
Дата: Понедельник, 05.02.2018, 00:42 |
Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
gling , нашел правильный, как мне кажется, выход. Использую [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) Sheets(NAMES(i)).Select ... End With Next
[/vba] то есть переход к листу и вместо ... вставляю любой заранее подготовленный код. И он выполняется как и если бы я запускал макрос на каждом листе отдельно.
gling , нашел правильный, как мне кажется, выход. Использую [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) Sheets(NAMES(i)).Select ... End With Next
[/vba] то есть переход к листу и вместо ... вставляю любой заранее подготовленный код. И он выполняется как и если бы я запускал макрос на каждом листе отдельно.fijer
Сообщение отредактировал fijer - Понедельник, 05.02.2018, 00:43
Ответить
Сообщение gling , нашел правильный, как мне кажется, выход. Использую [vba]Код
For i = 1 To UBound(NAMES) With Sheets(NAMES(i)) Sheets(NAMES(i)).Select ... End With Next
[/vba] то есть переход к листу и вместо ... вставляю любой заранее подготовленный код. И он выполняется как и если бы я запускал макрос на каждом листе отдельно.Автор - fijer Дата добавления - 05.02.2018 в 00:42
gling
Дата: Понедельник, 05.02.2018, 01:32 |
Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2521
Репутация:
677
±
Замечаний:
0% ±
2010
fijer , тогда With Sheets(NAMES(i)) и End With можно удалить.
fijer , тогда With Sheets(NAMES(i)) и End With можно удалить.gling
ЯД-41001506838083
Ответить
Сообщение fijer , тогда With Sheets(NAMES(i)) и End With можно удалить.Автор - gling Дата добавления - 05.02.2018 в 01:32