将行从一个表移动到另一个(Excel VBA)

时间:2019-07-10 05:10:33

标签: excel vba

我希望在工作簿中实现某种剪切和粘贴功能的自动化,以将退还的贷款详细信息从未偿还的贷款表转移到“ LoansHistory”表。我在网上找到了此代码,并一直在尝试对其进行修改,以根据相应的“列K”单元格中的日期(或当前任何文本)将行内容添加到现有表中。

从本质上讲,我通常是编码方面的新手,我很难修改下面的代码以使用ListObjects.ListRows而不是下一个空行来查找行并将行粘贴到现有表中(就像现在一样) 。

我了解还有其他一些帖子可以解决此问题,但是由于我对VBA的了解非常有限,因此我仍在努力应用适当的更改。

在尝试使用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 :(得分:0)

要调试它,您可以很容易地看到崩溃的地方,方法是在代码中放置一个断点并逐步执行。

要么单击代码区域旁边的左栏,直到代码行变为红色,要么在代码中添加一个Stop命令。

此外,暂时注释掉两个Application.ScreenUpdating =命令。在调试时,这些只会阻碍您。如果它们之间发生错误,那么您将很难使屏幕恢复到最新状态。您可以在调试窗口(Ctrl + G)中运行后者以将其重新打开。现在,只需打开屏幕即可。

一旦遇到断点,您可以按F8键一次继续执行一个代码命令,直到找到出现错误的行。尝试一下,当您碰到这样的绊脚石时,它确实会有所帮助。

尽管我一眼不喜欢这部分代码.Range("A" & J + 1),但尝试将J + 1放在额外的括号中。 .Range("A" & (J + 1))