繁体   English   中英

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

[英]Moving Rows from One Table to Another (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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM