Excel中的VB宏无法选择正确的单元格的问题

时间:2018-11-05 19:34:10

标签: excel vba excel-vba

我有一个程序可以根据.csv文件中的数据生成发票。它按预期的方式工作,为.csv中的第一个条目创建发票,但随后跳至最后一个条目,然后出于某种原因随机选择一百万个范围内的空白单元格。这是我的“下一张发票”宏代码,似乎引起了该问题:

Sub NextInvoiceShopOne()
    Application.ScreenUpdating = False
    Dim Invoice As String
    Dim dDate As String
    Dim ws As Worksheet
    Dim sName As String

    Range("I2").Value = Range("I2").Value + 1

    Sheets("Payments").Select
    ActiveCell.Offset(0, 3).Select
    ActiveCell.End(xlDown).Select
    ActiveCell.Offset(0, -3).Select
    Selection.Copy

    Sheets("Invoice").Select
    Range("B15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

要为宏提取的数据就这样存储(在2个不同的文件中):

<vendor name>, <vendor sku>, <item name>, <item type (always constant)>, <quantity sold>, <total cost>, <default vendor price>

(让我们称之为文件付款)

<vendor>, <address>, <city>, <state>, <zip code>, <email>    

(让我们称其为一位供应商)

该报告应该从付款文件中提取供应商信息,并将其与供应商文件中的某些数据进行匹配,然后在屏幕上打印结果。

但是我真正想知道的是为什么只处理付款文件的第一个和最后一个条目,然后才跳到空白单元格。

编辑

略微更改了代码以解决空白单元格选择问题

Sub NextInvoiceShopOne()
Application.ScreenUpdating = False
Dim Invoice As String
Dim dDate As String
Dim ws As Worksheet
Dim sName As String

Range("I2").Value = Range("I2").Value + 1

Sheets("Payments").Select
ActiveCell.Offset(0, 3).Select
Range(Range("A5"), Range("G5").End(xlDown)).Select
Do Until IsEmpty(ActiveCell.Offset(1, 0))
    ActiveCell.Offset(1, 0).Select
Loop
Selection.Copy

Sheets("Invoice").Select
Range("B15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

1 个答案:

答案 0 :(得分:1)

“但随后会跳至最后一个条目,然后出于某种原因会随机选择一百万个范围内的空白单元格”

ActiveCell.End(xlDown).Select-将选择ActiveCell列中的最后一个单元格,这就是为什么它将您带到第1,048,576行。

ActiveCell.Offset(0, 3).Select
ActiveCell.End(xlDown).Select
ActiveCell.Offset(0, -3).Select

我会发表评论,但我的声誉得分未超过50