Прежде всего, я - любитель, когда дело доходит до кодирования, и кое-какой код, который у меня есть, я выяснил, как это сделать, прибегая к гуглу, так что если то, что я делаю, не является интуитивным, неэффективным или невыполнимо, тогда, пожалуйста, дайте мне знать.
Я работал над созданием макроса, который позволяет мне быстро написать «повествование» из предварительно выбранного текста из опроса. У меня есть несколько рабочих листов в рабочей книге, 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 для установки имен листов?