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

Excel 为什么我的宏在工作簿中工作,而不是在PERSONAL.XLSB中工作?,excel,vba,Excel,Vba,我在工作表上创建了一个宏,将动态范围内的单元格设置为“0”。它工作得很好。我希望此代码可用于其他工作表,因此我将工作代码添加到了我的PERSONAL.XLSB。当我将相同的代码复制到PERSONAL.XLSB时,它不起作用。因为我将代码移到了Personal.XLSB,所以即使在原来的工作表上也没有 我在Personal.xlsb中还有其他宏可以使用,因此我知道我正在正确使用我的Personal macros工作簿 Sub Zero() Dim lastRow As Lon

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

我在Personal.xlsb中还有其他宏可以使用,因此我知道我正在正确使用我的Personal macros工作簿

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时,它不会执行任何操作

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

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

这个问题的解决方案取决于你需要什么。您只需将“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

不客气。如果答案解决了您的问题,您可以标记:)