如何修复Office 2013上发生的范围激活上的运行时错误9,但不在Office365上

问题描述 投票:1回答:2

在Office 2016和Office 365中似乎运行正常的一行代码在使用Office 2013时会遇到运行时错误9。

Workbooks.Open Filename:="W:\06 Project Management Master\Project Resource Tool\Backend Database\Backend Database.xlsm"

Workbooks("Backend Database").Worksheets("Home").Activate
Workbooks("Backend Database").Worksheets("Home").Range("D15").Activate

具体来说,它是在第二个工作簿中激活Range("D15")的行,该工作簿不是包含VBA代码的工作簿。工作簿和工作表存在,很明显,因为它适用于其他版本的Office,但对于我的生活,我无法弄清楚问题在这里 - 除了Office的版本。

我已经尝试将语句放入With Workbooks("Backend Database").Worksheets("Home")语句中,但是当Range("D15").Activate行到达时它会遇到运行时错误。

除了将Office 2013上的计算机更新到Office 365之外,有没有人有任何建议?我试过问IT,并且可以理解地笑了,哈哈。我希望有人之前遇到过这个并且知道如何解决它。

excel vba office365 excel-2013
2个回答
1
投票

避免完全使用SelectActivate语句(除非在极少数情况下你绝对不能避免使用这些语句)

This SO thread将帮助您避免将来的那些

如果要更改范围的值,可以执行以下操作:

'Workbooks("Backend Database").Worksheets("Home").Range("D15").Activate 'Disregard
Workbooks("Backend Database").Worksheets("Home").Range("D15").Value = "NewValue"

另外,但与你的问题无关,你可以(也许应该,为了你自己),如果你反复引用一个对象或范围,使用With...End With。例如:

With Workbooks("Backend Database").Sheets("Home") 
    .Range("A1").Font.Bold = True
    .Range("D15").Value = "NewValue"
End With

0
投票

Workbooks.Open方法返回对打开的Workbook对象的引用,但是你要丢弃它。只需抓住它as hinted by Rory

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="W:\06 Project Management Master\Project Resource Tool\Backend Database\Backend Database.xlsm")

现在你不再需要从Workbooks集合中取消引用该对象,并在20个地方对文件名进行硬编码 - 只要在需要引用该工作簿中的任何内容时使用该wb变量 - 对于工作表来说也是如此:

Dim homeSheet As Worksheet
Set homeSheet = wb.Worksheets("Home")

With homeSheet
    .Range("D15").Value = "Hello"
    '...
End With

我会第二次Tim Stack大力鼓励你尽可能避免SelectActivate

© www.soinside.com 2019 - 2024. All rights reserved.