Excel 我设置了一个工作表名称,但仍然需要运行时错误424对象

Excel 我设置了一个工作表名称,但仍然需要运行时错误424对象,excel,vba,Excel,Vba,首先也是最重要的是,我是一个业余的编码爱好者,我的一些代码,我已经通过谷歌找到了如何做的方法,所以如果我所做的不是直观的、低效的或不可行的,那么请让我知道 我一直在制作一个宏,它允许我从调查中预选的文本中快速写出“叙述”。我在工作簿中有一些工作表,我在代码中引用了其中的10个。为了便于编码,我找到了如何通过“set”函数命名工作表,这样我就可以简单地调用工作表,而无需每次访问工作表上的数据时都写出“Thisworkbook.worksheets(“name”).Range()”,而只需使用nam

首先也是最重要的是,我是一个业余的编码爱好者,我的一些代码,我已经通过谷歌找到了如何做的方法,所以如果我所做的不是直观的、低效的或不可行的,那么请让我知道

我一直在制作一个宏,它允许我从调查中预选的文本中快速写出“叙述”。我在工作簿中有一些工作表,我在代码中引用了其中的10个。为了便于编码,我找到了如何通过“set”函数命名工作表,这样我就可以简单地调用工作表,而无需每次访问工作表上的数据时都写出“Thisworkbook.worksheets(“name”).Range()”,而只需使用name.Range()(其中Name是我通过Set函数为工作表指定的名称).我最近发现了如何将代码设置为在工作簿打开时运行,我将其设置为清除模板中可能忘记删除的任何数据,但是,只有一些工作簿在稍后的代码中被命名和记住。它们是GI、PF和TF。例如,我可以打开即时窗口并编写“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
编辑:

好的,正如Tim Williams在下面的评论中所指出的,我似乎已经更改了VBA项目浏览器树中工作表的名称,它们与我试图设置的工作表的名称不匹配,除了GI、TF和PF。所以这可能就是问题所在。我将返回浏览器树并将它们重命名为我正在使用的名称代码中的ng


附带问题,如果我已经通过浏览器树命名了工作表,那么使用set函数设置工作表的名称有意义吗?

您是否更改了任何工作表(在VBA项目浏览器树中)的代码名,使其与您正在使用的名称相匹配(例如)
GI
工作表?如果其他工作表没有被“记住”,这可能是因为代码中的某些内容后来清除了该变量,或者整个项目由于(例如)而被重置一个未处理的异常。另请参见:您的问题中似乎混淆了工作簿和工作表,您能检查一下吗?旁注:
Public GI,PF,WSFA,…WSPGAC As worksheet
应该是
Public GI As worksheet,PFas worksheet,
等等。另外,您声明了很多工作表,但从未实际使用过您应该有类似于
GI.RANGE(“A…”)的样式注释-使用
这样的样式来节省空间(?)会适得其反,并且会导致其他人(也可能是您)Tim-谢谢你的样式说明,我会更正它,我也不知道我是否更改了代码名,但是,这可能是有可能的。我不在检查它,所以我明天会更新让你知道。