Попытка активировать лист по внутреннему имени приводит к тому, что индекс выходит за пределы диапазона Ошибка - PullRequest
1 голос
/ 27 марта 2019

У меня проблемы с очень простой функцией в VBA:

Я работаю с 2 рабочими листами (Расчет и черчение). Поэтому теперь я хочу при необходимости активировать рабочие листы, называя их (имя), а не имя (указывается в свойствах листа), чтобы сделать мой лист «защищенным от идиота». Я не хочу использовать имя листа, но лист (имя), поэтому, когда пользователь изменяет имена листов во внешнем интерфейсе, исполняемый код все еще работает.

F.e. моя таблица «Расчет» имеет имя «Расчет», но (имя) «calc»:

Worksheets("calc").Activate (выдает ошибку Index out Range)

calc.Cells() (работает просто отлично)

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Попробуйте:

Option Explicit

Sub test()

    ThisWorkbook.Worksheets("Sheet1").Activate '<- Activate sheet using the name shown outside
    ws1.Activate '<- Activate sheet using the name shown in the VBA Editor

End Sub
0 голосов
/ 27 марта 2019

(name).Activate делает свое дело. В моем примере это будет:

calc.Activate

Благодаря @ TimWilliams

Edit: Это свойство называется CodeName и доступно только для чтения!

https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.codename

Если вы пытаетесь изменить его программно, выдается следующее сообщение об ошибке:

https://support.microsoft.com/en-us/help/282830/programmatic-access-to-office-vba-project-is-denied

Поэтому его можно изменить программно, только если вы разрешите доступ к проекту VBA, который по умолчанию не разрешен по соображениям безопасности!

...