Перемещение строк из одной таблицы в другую (Excel VBA) - PullRequest
0 голосов
/ 10 июля 2019

Я собираюсь автоматизировать некоторую функцию вырезки и вставки в моей рабочей книге для переноса сведений о возвращенных ссудах из непогашенного листа ссуд на лист «LoansHistory». Я нашел этот код в сети и пытался изменить его, чтобы добавить содержимое строки в существующую таблицу на основе наличия даты (или любого текста, в настоящее время) в соответствующей ячейке "столбца K".

По сути, будучи новичком в кодировании в целом, мне крайне трудно изменить приведенный ниже код для поиска и вставки строк в существующую таблицу, используя ListObjects.ListRows вместо следующей пустой строки (как в настоящее время).

Я понимаю, что есть несколько других постов, в которых другие обсуждали эту проблему, но поскольку мои знания VBA очень ограничены, я все еще пытаюсь применить соответствующие изменения.

Я постоянно получаю коды ошибок, такие как «Sub Script Out of Range» или «Объект не поддерживает эту функцию» при попытке использовать ListObjects.ListRows функции.

Любая помощь была бы очень признательна.

Sub Cheezy()

    Dim xRg As Range
    Dim xCell As Range
    Dim i As Long
    Dim J As Long
    Dim K As Long

   i = Worksheets("Loans").UsedRange.Rows.count
   J = Worksheets("LoansHistory").Cells(Rows.count, 1).End(xlUp).Row

    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("LoansHistory").ListObjects("History")) = 0 Then J = 0
       End If
  Set xRg = Worksheets("Loans").Range("K4:K" & i)
    On Error Resume Next
    Application.ScreenUpdating = False
   For K = 1 To xRg.count
       If Len(xRg(K).Value) > 0 Then
          xRg(K).EntireRow.Copy Destination:=Worksheets("LoansHistory").Range("A" & (J + 1))
            xRg(K).EntireRow.Delete
            If Len(xRg(K).Value) > 0 Then
                K = K - 1
            End If
         End If
      Next
    Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 10 июля 2019

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

Либо нажимайте на левую строку рядом с областью кода, пока строка кода не станет красной, либо просто добавьте команду Stop в свой код.

Также, закомментируйте две команды Application.ScreenUpdating =. Пока вы отлаживаете, они будут только мешать вам. Если между ними возникнет ошибка, вам будет сложно снова включить обновление экрана. Вы можете запустить последний в окне отладки (Ctrl + G), чтобы включить его снова. А пока просто оставьте обновление экрана включенным.

Как только вы достигли точки останова, вы можете нажать F8, чтобы продолжить выполнение кода по одной команде за раз, пока не найдете строку с ошибками. Поэкспериментируйте с ним, это действительно поможет, когда вы столкнетесь с камнем преткновения, таким как этот.

Мне не нравится эта часть кода с первого взгляда .Range("A" & J + 1), хотя, попробуйте поставить J + 1 в дополнительный набор скобок. .Range("A" & (J + 1)).

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