宏将在开发人员中和热键中起作用,但在按钮中不起作用...为什么知道?

时间:2018-11-23 06:54:49

标签: excel vba excel-vba

如上所述,代码在开发人员和热键上都可以正常工作,但是当我使用按钮时,“转到最后一行+ 1”似乎不起作用。当我选择按钮时,数据将继续被复制并重新复制到第2行。

Sub Entry_Schedule()
' Entry_Schedule Macro
    Dim FrstEmptCll As Range
    FrstEmtCll = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Sheet2").Range("D4:I4").Copy
    Sheets("Data").Range("A" & FrstEmtCll + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   End Sub

1 个答案:

答案 0 :(得分:2)

您需要使用工作表限定每个范围,行,列等:

FrstEmtCll = Worksheets("Data").Range("A" & Worksheets("Data").Rows.Count).End(xlUp).Row

第二个问题是您声明了Dim FrstEmptCll As Range,但是尝试将行号放入范围对象.End(xlUp).Row中。

因此Set到单元格的范围和偏移量:

Option Explicit

Sub Entry_Schedule()
    ' Entry_Schedule Macro
    Dim FrstEmtCll As Range
    Set FrstEmtCll = Worksheets("Data").Range("A" & Worksheets("Data").Rows.Count).End(xlUp).Offset(RowOffset:=1)
    Worksheets("Sheet2").Range("D4:I4").Copy
    FrstEmtCll.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

或使用行号(如Long):

Option Explicit

Sub Entry_Schedule()
    ' Entry_Schedule Macro
    Dim FrstEmptRow As Long
    FrstEmptRow = Worksheets("Data").Range("A" & Worksheets("Data").Rows.Count).End(xlUp).Row + 1
    Worksheets("Sheet2").Range("D4:I4").Copy
    Worksheets("Data").Range("A" & FrstEmptRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

此外,您错误输入了变量名FrstEmptCllFrstEmtCll(缺少p)。这意味着您现在实际上有2个不同的变量(很容易炸毁您的代码)。为避免此类错误,我强烈建议激活Option Explicit:在VBA编辑器中,转到工具选项 Require Variable Declaration