excel - VBA代码不能按顺序工作有什么原因吗?

标签 excel vba

我不完全确定如何表达这个问题。但是,我将能够在这里更好地解释它。下面是我的代码。我的代码的目的是将数据从一张纸复制并粘贴到另一张纸上。

直到到达最后一行代码(不包括“End Sub”),一切似乎都运行良好。最后一行应该填充到最后一行。我遇到的问题是,如果我分解 With,代码可以正常工作语句和最后一行并分别运行它们。

我知道最后一行有效,但是当我运行整个宏时,我收到“运行时错误'1004”错误消息。为什么我的代码不起作用?

Sub Data_Table()

Dim Data As Worksheet
Dim Sum As Worksheet
Dim lr As Long
Dim lr2 As Long
Dim lr3 As Long
Dim lr4 As Long
Dim lr5 As Long


Set Data = Worksheets("Data-Tracker")
Set Sum = Worksheets("Summary")
lr = Data.Cells(Rows.Count, "E").End(xlUp).Row
lr2 = Data.Cells(Rows.Count, "A").End(xlUp).Row 'for customer type
lr3 = Data.Cells(Rows.Count, "B").End(xlUp).Row ' for Type
lr4 = Data.Cells(Rows.Count, "C").End(xlUp).Row ' for Rate/Budget
lr5 = Data.Cells(Rows.Count, "D").End(xlUp).Row ' for Date


    With Sum

        .Range("B6:B12").Copy Destination:=Data.Range("E" & lr).Offset(1, 0)
        .Range("C6:C12").Copy Destination:=Data.Range("F" & lr).Offset(1, 0)
        .Range("D6:D12").Copy Destination:=Data.Range("G" & lr).Offset(1, 0)
        .Range("C2").Copy Destination:=Data.Range("B" & lr3).Offset(1, 0)
        .Range("B4").Copy Destination:=Data.Range("C" & lr4).Offset(1, 0)
        .Range("B5").Copy Destination:=Data.Range("D" & lr5).Offset(1, 0)


    End With

    Data.Range("B" & lr3, "D" & lr5).AutoFill Destination:=Data.Range("B" & lr3, "D" & lr)


End Sub

任何帮助将不胜感激。

编辑:

为了帮助进一步解释我的观点,如果我首先像这样运行我的代码:
    With Sum

        .Range("B6:B12").Copy Destination:=Data.Range("E" & lr).Offset(1, 0)
        .Range("C6:C12").Copy Destination:=Data.Range("F" & lr).Offset(1, 0)
        .Range("D6:D12").Copy Destination:=Data.Range("G" & lr).Offset(1, 0)
        .Range("C2").Copy Destination:=Data.Range("B" & lr3).Offset(1, 0)
        .Range("B4").Copy Destination:=Data.Range("C" & lr4).Offset(1, 0)
        .Range("B5").Copy Destination:=Data.Range("D" & lr5).Offset(1, 0)


    End With

'    Data.Range("B" & lr3 & ":D" & lr5).AutoFill Destination:=Data.Range("B" & lr3, "D" & lr)

然后像这样运行它:
'    With Sum
'
'        .Range("B6:B12").Copy Destination:=Data.Range("E" & lr).Offset(1, 0)
'        .Range("C6:C12").Copy Destination:=Data.Range("F" & lr).Offset(1, 0)
'        .Range("D6:D12").Copy Destination:=Data.Range("G" & lr).Offset(1, 0)
'        .Range("C2").Copy Destination:=Data.Range("B" & lr3).Offset(1, 0)
'        .Range("B4").Copy Destination:=Data.Range("C" & lr4).Offset(1, 0)
'        .Range("B5").Copy Destination:=Data.Range("D" & lr5).Offset(1, 0)
'
'
'    End With

    Data.Range("B" & lr3 & ":D" & lr5).AutoFill Destination:=Data.Range("B" & lr3, "D" & lr)

我必须添加撇号以取消代码才能使其正常工作。否则我得到一个自动填充方法错误。

最佳答案

您需要做两件事。

第一个也是很明显的一个是修复有问题的行中的语法:需要在源和目标中指示范围地址,而不是角落:... lr3 & ":D" ...而不是这个... lr3, "D" ...

第二个是确保目标总是比源高,以防万一:

If lr > lr5 Then
     Data.Range("B" & lr3 & ":D" & lr5).AutoFill ....
End If

关于excel - VBA代码不能按顺序工作有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981131/

相关文章:

Excel:需要宏 - 2 列数据变为 1 列 "every other"

vba - 如果正在使用工作簿,请引用打开工作簿并创建错误消息

excel - 使用 ADO 将 Excel 电子表格导入数组的更快方法

vba - 百分比之间的 Excel VBA 自动筛选

c# - 如何将数组放入excel范围

excel - 动态生成数据验证列表的年份数组Excel VBA

ms-access - Access VBA 中的 Microsoft Outlook 对象库

arrays - Excel VBA - 按固定宽度分隔一维数组的元素

excel - 将动态范围和静态范围从Excel导入到不是从单元格A1开始的MS-Access

Excel UDF 计算应返回 'original' 值