Excel 使用“带工作表”时出现运行时错误9

Excel 使用“带工作表”时出现运行时错误9,excel,vba,Excel,Vba,我想出了一个解决方案,应该绕过我在VBA代码下面发现的原始问题,这样,如果不需要额外的信息,但我遇到了运行时错误9,我就可以保持这个简短和甜蜜。我在两本基本的工作簿上测试了这段代码,效果很好。LastRow行是调试时高亮显示的行。我尝试将文件名用单号括起来,因为名称中有空格,但这并没有解决错误 Sub MakeGSATable() Dim LastRow As Long LastRow = Workbooks("Reservation Activity Dashboard (RAD) CP.x

我想出了一个解决方案,应该绕过我在VBA代码下面发现的原始问题,这样,如果不需要额外的信息,但我遇到了运行时错误9,我就可以保持这个简短和甜蜜。我在两本基本的工作簿上测试了这段代码,效果很好。LastRow行是调试时高亮显示的行。我尝试将文件名用单号括起来,因为名称中有空格,但这并没有解决错误

Sub MakeGSATable()

Dim LastRow As Long
LastRow = Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR").Cells(Worksheets("GSR").Rows.Count, "A").End(xlUp).Row

With Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR")
.Range("A8").Select
.Range(Selection, Selection.End(xlToRight)).Select
.Range(Selection, Selection.End(xlDown)).Select
.ListObjects.Add(xlSrcRange, Range("$A$8:$AA$" & LastRow), , xlYes).Name = _
    "GSATable"
.ListObjects("GSATable").TableStyle = "TableStyleLight20"
End With

End Sub
作为背景:我的主工作簿有几个宏,必须全屏打开并保持,且不带公式栏。我添加了一个用于激活/停用工作簿的宏,因此如果用户打开另一个Excel实例,它将正常工作。我的主书中的一个宏会调出另一个工作簿,在其中启动我需要的宏,但在某个时候它会被激活/停用宏缠住,在没有激活/停用宏的情况下永远不会真正完成那些可以工作的宏。因此,我决定尝试添加此宏,因为我认为这将是一个很好的解决方法。

在With块中编写lastRow调用,以便根据需要完全限定所有对象

Dim LastRow As Long
With Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR")
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

现在你的电话线

LastRow = Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR").Cells(Worksheets("GSR").Rows.Count, "A").End(xlUp).Row
相当于

LastRow = Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR").Cells(ActiveWorkbook.Worksheets("GSR").Rows.Count, "A").End(xlUp).Row
因此,如果活动工作簿中没有GSR工作表,它将给出一个下标超出范围的错误

这句话应该是

LastRow = Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR").Cells(Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR").Rows.Count, "A").End(xlUp).Row
但这会变得有点笨拙,因此如果您将其移动到您的区块内,效果会更好:


ActiveWorkbook中可能没有WorksheetsGSR,因此在计算.Rows.count时,您可能需要使用WorkbookReservation活动仪表板RAD CP.xlsm.WorksheetsGSR。我想在选择和GSR工作表中总是编写这个冗长的字符串WorkbookReservation活动仪表板RAD CP.xlsm很方便。H-m-m-m。。。可能出现什么问题?^^如果GSR不是活动工作表,则所有Select语句都将崩溃,但据我所知,它们都是冗余的,因此应该删除。但您应该将$A$8:$AA$&LastRow的范围更改为。范围$A$8:$AA$&LastRow。并非所有前来提问的人都是专家,@JohnyL。你聪明的阿莱克评论,特别是关于:选择对任何人都没有帮助,所以什么都不用谢。我用录音机得出了这个结论,并尽可能地修改了它。我的长篇大论是为了帮助我理解发生了什么,因为我对VBA还很陌生,没有实际的课程。当一个文件正常工作时,我会返回并为一个较小的打包代码添加变量。感谢您解释上面的部分,因为我确实对它进行了一些修改,并取出了activesheet部分,因为在我的代码中,主书不是活动表,我想我可以将它更改为我想要的任何打开的书。我应用了您的更改,在.RangeA8行中出现错误1004。我继续在MakeGSRTable的顶部标记了要激活的主工作簿,这使它开始工作。谢谢你的帮助。@Craig正如我在对这个问题的评论中所说的,Select语句似乎都是多余的——只需删除它们。你太好了,哟!我删除了选择部分,添加了。在$A$8:$AA$&LastRow行之前,删除了我最新的激活行,并且运行平稳。非常感谢你!
With Workbooks("Reservation Activity Dashboard (RAD) CP.xlsm").Worksheets("GSR")
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    '...