Выбор рабочего листа VBA в зависимости от значения ячейки

Я новичок в VBA, поэтому, пожалуйста, извините меня, если это простой вопрос! Я создал отчет-шаблон (под названием «Имя_клиента»), который я хочу заполнить для каждого клиента — по сути, все, что для этого нужно, — это выбрать клиента в фильтре отчета сводной таблицы и скопировать значения данных сводной таблицы в шаблон. Чтобы автоматизировать это, я создал следующий код, чтобы дублировать шаблон и переименовать его для клиента, выбранного в данный момент в сводной таблице:

Sheet_Name_To_Create = Sheets("Pivot").Range("B1").Value
Sheets("Client_Name").Select
Sheets("Client_Name").Copy After:=Sheets(Sheets.Count)
Sheets(ActiveSheet.Name).Name = Sheet_Name_To_Create

Следующим моим шагом было бы вернуться к сводной таблице (лист «Сводная») и скопировать данные на вновь созданный рабочий лист клиента. Однако имя рабочего листа, очевидно, будет меняться для каждого клиента. Есть ли способ сослаться на код VBA, чтобы выбрать рабочий лист, имя которого совпадает с именем клиента, отображаемого в данный момент в фильтре отчетов сводных таблиц?


person Nat Aes    schedule 06.01.2014    source источник


Ответы (1)


Sheets(ActiveSheet.Name) — это неудобный способ сказать ActiveSheet.

Просто запишите ActiveSheet в переменную после копирования.

Dim CopiedSheet as Worksheet
Set CopiedSheet = ActiveSheet

Вам не нужно имя листа, когда у вас есть сам лист.

Рекомендуемая литература: как избежать использования Select в макросах Excel VBA

person GSerg    schedule 06.01.2014
comment
Спасибо за этот совет, хотя разве я не столкнулся бы с циклической ошибкой, из-за которой ActiveSheet является недавно продублированным шаблоном, а затем переключается на рабочий лист Pivot, когда я перемещаюсь, чтобы скопировать данные? Поэтому, как только я переключился на сводной лист, CopiedSheet (т.е. ActiveSheet) теперь является самим сводным листом и не может быть направлен на дублированный шаблон, который больше не является ActiveSheet! - person Nat Aes; 06.01.2014
comment
@user2696883 user2696883 ActiveSheet — это свойство, предоставляемое Excel. Он изменяется автоматически, чтобы отразить активацию листа. В любой момент он содержит ссылку на лист. Вы копируете эту ссылку. Ваша копия не изменится автоматически. - person GSerg; 06.01.2014