运行宏并在此原始表中生成数据后,我提示用户使用以下代码命名该原始表。
oriSheet = InputBox("Please Name the Sheet?", vbOKCancel)
If oriSheet = False Or oriSheet = "" Then
MsgBox "Invalid Name"
Exit Sub
Else
ActiveSheet.Name = oriSheet
End If
oriSheet = ""
然后我运行另一个子程序,获取刚才的 oriSheet 进行过滤。
是否可以使用变量引用该工作表?
因为我似乎无法通过以下代码中的错误“下标超出范围”到达那里。
Set sht = ThisWorkbook.Worksheets("oriSheet")
Set newsht = ThisWorkbook.Worksheets("sheet2")
我删除了双引号,因为这样 oriSheet 就不会像其他编程语言一样被解释。但它仍然不起作用。
我以为这可能很容易,但我花了几个小时才找到答案。
我去谷歌搜索,有一句话说“引用工作表有两种方式,一种是通过索引(但我不知道索引)一种是通过名称(但我也不知道名称?)”
答案1
将您的第一个宏更改为oriSheet
在其末尾存储到另一个变量中;
Public oriSheetRecorder As String
oriSheet = InputBox("Please Name the Sheet?", vbOKCancel)
If oriSheet = False Or oriSheet = "" Then
MsgBox "Invalid Name"
Exit Sub
Else
ActiveSheet.Name = oriSheet
On Error Goto Errorhandler
oriSheetRecorder = oriSheet
oriSheet = ""
End If
Errorhandler:
MsgBox "Name of the active sheet is " , ActiveSheet.Name, "It is Invalid Name or an error has happened"
Exit Sub
然后在你的第二个中Sub
有这个:
Set sht = ThisWorkbook.Worksheets(oriSheetRecorder)
Set newsht = ThisWorkbook.Worksheets("sheet2")
您的代码现在不起作用的原因是,因为您清除了oriSheet
此行:oriSheet = ""
所以稍后您无法引用它。此外,您不需要(不应该)"
在变量周围放置。double-quote
在 excel 中用于区分文本和命令和变量。oriSheet
是一个变量,根据其定义它是一个字符串,因此它永远不需要"
在它周围被识别为文本。