excel 简单的代码无法在VBA上工作-请帮助我

mjqavswn  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(103)

我遇到了一个问题,代码行不能像突出显示的那样工作。错误代码1004不断弹出。我试着在代码周围使用激活,但无济于事。我在即时窗口中测试了这行代码,它工作正常。
不知道为什么代码有问题。

3pvhb19x

3pvhb19x1#

无论您的宏记录代码是什么,在某些版本和版本的Excel中有时会发生这种情况。有时,Worksheet对象的“Select”方法的工作方式与其他Excel版本的工作方式不完全相同,您必须使用Activate方法代替。
而不是:

ThisWorkbook.Sheets("FX rate").Select
    Range("A1").Select

试试这个:

ThisWorkbook.Worksheets("FX rate").Activate
    Range("A1").Select
zdwk9cvp

zdwk9cvp2#

如果您的代码位于工作表对象而不是模块中,则可能会发生这种情况。
最快的修复方法是将Range("A1").Select更改为ThisWorkbook.Sheets("FX rate").Range"A1").Select,但在您尚未发布的代码的其余部分,您仍然会遇到更多问题。
更好的解决方法是将代码移到模块中,使用With/End With,或遵循@Ike的链接以避免使用select。

wb1gzix0

wb1gzix03#

你真的应该尽量避免完全使用Select。重新编码宏将产生此代码,但您应该随后修改代码以删除它。即使做得很好,它也可能会很糟糕,例如,如果用户在运行时单击屏幕。
对于示例的第一部分,您可以执行以下操作:

With ThisWorkbook.Worksheets("Nostro bals - 5010")
    
    .Range("A2:F1000").ClearContents

End With

对于第二部分,您的代码将通过使用A1中的CTRL-Down的等效值来查找数据的底部。这意味着如果数据中有一个中断,它将只清除到该行。如果这是你的意图,那么你可以使用以下方法:

With ThisWorkbook.Worksheets("FX rate")
    
    ex_end_row = .Cells(1, 1).End(xlDown).Row
    .Range("A3:B" & ex_end_row).ClearContents

End With

然而,如果你真的想让它找到A列中最后一个包含数据的单元格,不管是否有中断等,那么你可以使用这个,它从A列的最底部开始,然后使用CTRL-Up

With ThisWorkbook.Worksheets("FX rate")

    ex_end_row = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("A3:B" & ex_end_row).ClearContents

End With

请注意,无论使用哪种方法,都应该事先声明ex_end_row:

Dim ex_end_row As Long

相关问题