为什么我的宏只能在工作簿中工作,而不能在PERSONAL.XLSB中工作?

时间:2019-07-17 15:34:10

标签: excel vba

我在工作表上创建了一个宏,该宏将动态范围内的单元格设置为“ 0”。效果很好。我希望此代码可在其他工作表上使用,因此我将工作代码添加到了PERSONAL.XLSB中。当我将相同的代码复制到PERSONAL.XLSB时,它不起作用。甚至在原始工作表上也没有,因为我将代码移至Personal.XLSB

我在Personal.xlsb中还有其他宏可以正常工作,所以我知道我在正确使用我的个人宏工作簿。

Sub Zero()       
    Dim lastRow As Long
    Dim ws As Worksheet
    Set ws = Sheet1
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
         Application.ScreenUpdating = False
         ws.Range("AA16:AA" & lastRow).FormulaR1C1 = "0"
End Sub

此代码使所有单元格(从AA16开始,一直到内容的最后一个单元格都设置为“ 0”)。万岁!将此代码复制到Personal.xlsb时,它什么也不做。

我没有收到错误消息,什么也没发生。

1 个答案:

答案 0 :(得分:1)

问题出在第3行,您在此处设置变量ws的值。如果在该行上放置断点并使用调试器,您会看到该程序无法识别“ Sheet1”,或者至少不能识别您想要的(作为Worksheet对象的实例)(请参见下面的图片)。

enter image description here

解决方案取决于您的需求。您可以简单地将{Sheet1'替换为ActiveWorkbook.ActiveSheet,这样宏将更改活动工作表的AA列中的内容。请参见下面的代码:

Sub Zero()
    Dim lastRow As Long
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
         Application.ScreenUpdating = False
         ws.Range("AA16:AA" & lastRow).FormulaR1C1 = "0"
End Sub