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

Вход

Регистрация

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

 

= Мир MS Excel/Выполнить макрос на листах c именами из столбца - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выполнить макрос на листах c именами из столбца (Формулы/Formulas)
Выполнить макрос на листах 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))
К сообщению приложен файл: 0109528.xlsm(21.3 Kb)


Сообщение отредактировал 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
Группа: Модераторы
Ранг: Местный житель
Сообщений: 12907
Репутация: 2843 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Так попробуйте
[vba]
Код
    For i = 1 To UBound(NAMES)
        With Sheets(NAMES(i))
            .Columns("C:D").ColumnWidth = 28
        End With
    Next
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 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
Дата добавления - 04.02.2018 в 23:56
gling Дата: Понедельник, 05.02.2018, 00:07 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1814
Репутация: 439 ±
Замечаний: 0% ±

2010
Вместо этого[vba]
Код
.Columns("C:D").ColumnWidth = 28
[/vba]или ниже, впишите название макроса, а лучше весь макрос, и посмотрите что получится.


ЯД-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 цели. Если первая более конкретная, под которую я код напишу и могу забыть. То вторая, как раз иметь возможность быстро записать макрос с нужными изменениями и так же быстро применить это к пару десяткам однотипных страниц.


Сообщение отредактировал 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
Группа: Друзья
Ранг: Старожил
Сообщений: 1814
Репутация: 439 ±
Замечаний: 0% ±

2010
Код не полный, не понятно что там выше написано. А пока ошибка [vba]
Код
   NEWNAME = Range("O15")
    Range("Table_" & NEWNAME & "_Wallets[Тип]").Select
[/vba]Range(..... на каком листе? Лучше макрос показывать в файле, там видно и весь макрос и данные на листе. Более понятно становится когда увидишь что от куда и куда. Лишние данные из файла -примера лучше удалить, чтобы не отвлекали от конкретной задачи.


ЯД-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]

то есть переход к листу и вместо ... вставляю любой заранее подготовленный код. И он выполняется как и если бы я запускал макрос на каждом листе отдельно.


Сообщение отредактировал 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
Группа: Друзья
Ранг: Старожил
Сообщений: 1814
Репутация: 439 ±
Замечаний: 0% ±

2010
fijer, тогда With Sheets(NAMES(i)) и End With можно удалить.


ЯД-41001506838083
 
Ответить
Сообщениеfijer, тогда With Sheets(NAMES(i)) и End With можно удалить.

Автор - gling
Дата добавления - 05.02.2018 в 01:32
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выполнить макрос на листах c именами из столбца (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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