Проблема с макросами VB в Excel, не выбирающая правильные ячейки - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть программа, которая предназначена для создания счета на основе данных в файле .csv. Сначала он работает как задумано, создавая счет для первой записи в .csv, но затем переходит к последней записи и затем по какой-то причине случайным образом выберет пустую ячейку в диапазоне 1 миллион. Это мой код для макроса «Следующая накладная», который, кажется, вызывает проблему:

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>    

(давайте назовем это одним вендором)

Предполагается, что отчет извлекает информацию о поставщике из файла платежей, сопоставляет ее с некоторыми данными в файле поставщиков и выводит результаты на экран.

Но я действительно хочу знать, почему обрабатываются только первые и последние записи файла платежей, затем он пропускает пустые ячейки.

EDIT

Немного изменил код, чтобы исправить проблему выбора пустых ячеек

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 голосов
/ 05 ноября 2018

", но затем переходит к последней записи, а затем случайным образом выбирает пустую ячейку в диапазоне 1 миллион по некоторым причинам"

ActiveCell.End (xlDown) .Select - выберет самую последнюю ячейку в столбце ActiveCell, поэтому она приводит вас к 1 048 576-й строке.

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

Я бы сделал этот комментарий, но мой рейтинг репутации не превысил 50

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...