首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA代码不按顺序工作是否有原因?

VBA代码不按顺序工作是否有原因?
EN

Stack Overflow用户
提问于 2018-12-30 20:21:55
回答 1查看 338关注 0票数 1

我不太清楚如何表达这个问题。不过,我可以在这里解释得更好。下面是我的密码。我的代码的目的是将数据从一个工作表复制和粘贴到另一个工作表。

一切看起来都很好,直到它到达最后一行代码(不包括"End“)。最后一行应该填到最后一行。我遇到的问题是,如果我拆分With语句和最后一行并分别运行它们,代码就能正常工作。

我知道最后一行可以工作,但是当我运行整个宏时,我会收到一条“运行时错误'1004”错误消息。为什么我的代码不能工作?

代码语言:javascript
复制
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

任何帮助都将不胜感激。

编辑

为了进一步解释我的观点,如果我第一次像这样运行我的代码:

代码语言:javascript
复制
    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)

然后在运行之后,就像:

代码语言:javascript
复制
'    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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-31 15:33:52

你需要做两件事。

第一个,也是最明显的一个是修复所讨论的行中的语法:需要同时在源和目的地指定范围地址,而不是在角:.lr3 & ":D".而不是这个.lr3, "D"..。

第二种方法是确保目的地总是高于源,以防万一:

代码语言:javascript
复制
If lr > lr5 Then
     Data.Range("B" & lr3 & ":D" & lr5).AutoFill ....
End If
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53981131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档