【发布时间】:2021-07-16 21:38:15
【问题描述】:
我有一个非常基本的问题让我发疯,我这辈子都想不通。
我有一个工作簿,其中包含多个工作表,这些工作表包含打开要填写的相同用户表单的单元格。目前,代码已关闭表单,特别是将工作簿返回到一页。我正在尝试让工作簿返回到之前正在处理的页面;为此,我设置了一个公共工作表变量 (wsWorking),该变量将设置为在打开用户窗体之前最后单击的工作表。但是,这样做时,我总是收到“运行时错误'9':下标超出范围”消息,并且调试消息显示我的 wsWorking 变量为空。
如果我输入工作表的名称而不是尝试使用变量,我可以将其打开到我想要的页面,但是看到这个页面将根据正在工作的内容是动态的,这不是我们想要的结果。
声明:'(在我的 ThisWorkbook 模块中,(常规)(描述)
Public wsWorking As Worksheet
尝试集:'(在私有模块中,已删除无关代码)
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set wsWorking = ThisWorkbook.Worksheets("MRL 1")
Dim clickRow As Integer
Dim ClickCol As Integer
尝试使用:(在不同的私有模块中)
Private Sub CloseForm_Click()
Call SaveFormToScorecard_Click
Unload Me
ActiveWorkbook.Sheets(wsWorking).Activate
End Sub
任何想法或建议将不胜感激 - 当工作表被激活时,我尝试在模块的一般声明中设置 wsWorking,并在模块中创建一个公共子,仅用于设置该变量,没有任何效果。
编辑改变 ActiveWorkbook.Sheets(wsWorking).Activate
行到
wsWorking.Activate
只给我一个新错误“运行时错误'424':需要对象”。我不相信一个模块中的变量设置会转移到另一个模块中。
【问题讨论】:
-
应该只是:
wsWorking.Activate变量已经是包含工作簿的工作表对象。或者,如果你愿意,你可以这样做:ActiveWorkbook.Sheets(wsWorking.name).Activate,但那是很长的路要走。 -
公共变量应该在标准模块中声明。