首页 > 解决方案 > 宏将在开发人员中使用热键但不能使用按钮...知道为什么吗?

问题描述

如上所述,代码在开发人员和热键中都可以正常工作,但是当我使用按钮时,似乎“转到最后一行 + 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

标签: excelvba

解决方案


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

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

或使用行号(as 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

此外,您输错了变量名FrstEmptCllvs FrstEmtCll(missing p)。这意味着您现在实际上有 2 个不同的变量(这很容易破坏您的代码)。为避免此类错误,我强烈建议您激活Option Explicit:在 VBA 编辑器中转到工具选项需要变量声明


推荐阅读