Я задаю имя рабочего листа, но все еще получаю объект ошибки времени выполнения 424 - PullRequest
0 голосов
/ 04 февраля 2020

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

Я работал над созданием макроса, который позволяет мне быстро написать «повествование» из предварительно выбранного текста из опроса. У меня есть несколько рабочих листов в рабочей книге, 10 из которых я упоминаю в своем коде. Чтобы облегчить свое кодирование, я узнал, как назвать рабочие листы с помощью функции «set», чтобы я мог просто вызывать рабочий лист без необходимости каждый раз писать «Thisworkbook.Worksheets (« Name »). Range ()»). Мне нужно получить доступ к данным на рабочих листах, и вместо этого я просто использую Name.Range () (где Name - это имя, которое я дал рабочему листу через функцию Set). Недавно я обнаружил, как настроить код для запуска при открытии рабочей книги, и я настроил ее для очистки любых данных, которые я, возможно, забыл стереть в шаблоне, однако, только некоторые из рабочих книг будут названы и запомнены в коде позже. Это GI, PF и TF. Например, я мог бы открыть окно Immediate и написать «GI.Activate», и он активирует рабочий лист (это также работает для рабочих листов PF и TF), однако «WSPSS.Activate» (или любой другой лист) дает мне 424 Ошибка времени выполнения. Мне было интересно, почему это было. Я делаю что-то другое / неправильное, что не позволяет VBA запоминать другие имена, или есть ограничение на то, сколько можно сделать в открытой подпрограмме книги? Вот мой код:

Option Explicit
Public GI, PF, WSFA, WSCom, WSSC, WSSoc, GenInfo, TF, WSNarrative, RTables, WSTSS, WSTGAC, WSPSS, WSPGAC As Worksheet

Private Sub Workbook_Open()

Set GI = ThisWorkbook.Worksheets("General Information"): Set PF = ThisWorkbook.Worksheets("Parent Form")
Set TF = ThisWorkbook.Worksheets("Teacher Form"): Set WSFA = ThisWorkbook.Worksheets("FA")
Set WSCom = ThisWorkbook.Worksheets("Com"): Set WSSC = ThisWorkbook.Worksheets("SC")
Set WSSoc = ThisWorkbook.Worksheets("Soc"):
Set WSPSS = ThisWorkbook.Worksheets("Parent SS"): Set WSPGAC = ThisWorkbook.Worksheets("Parent GAC")
Set WSTSS = ThisWorkbook.Worksheets("Teacher SS"): Set RTables = ThisWorkbook.Worksheets("Tables")


If ThisWorkbook.Path = "" Then 'This is so that only "new" files are cleared, but saved ones are left alone
    GI.OptionButtonF.Value = False: GI.OptionButtonM.Value = False
    Range("SFN").ClearContents: Range("SMN").ClearContents: Range("SLN").ClearContents: Range("DoB").Value = ""
    Range("PFN").ClearContents: Range("PLN").ClearContents: Range("PEvalDate").ClearContents
    Range("TFN").ClearContents: Range("TLN").ClearContents: Range("TEvalDAte").ClearContents
    PF.Range("B3:K28").ClearContents: PF.Range("B30:K30").ClearContents: PF.Range("E37:H40").Value = ""
    TF.Range("B3:K28").ClearContents: TF.Range("B30:K30").ClearContents: TF.Range("E37:H40").Value = ""
End If

End Sub

Редактировать:

Хорошо, как заметил Тим Уильямс в комментарии ниже, я, кажется, изменил имена рабочих листов в дереве проводника проекта VBA, и они не совпадают с именами рабочих листов, как я пытаюсь их задать, за исключением GI, TF и ​​PF. Так что это, вероятно, проблема там. Я go вернусь в дерево проводника и переименую их в то, что я использую в коде.

Дополнительный вопрос, если я уже назвал рабочие листы через дерево проводника, есть ли смысл использовать функция set для установки имен листов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...