Excel VBA使用for循环创建下标错误

时间:2018-12-05 17:54:14

标签: excel vba excel-vba

我是VBA的新手,但我正在尝试。

当您在工作表上按一个按钮时,我试图打开另一个Excel文件,从中获取行并将其复制到当前Excel文件中。我想让它自动化,所以您只需要按1按钮即可。

Private Sub CommandButton1_Click()
    Dim src As Workbook
    Set src = Workbooks.Open("C:\Users\gregg\Downloads\download.xls", True, True)

    Dim iTotalRows As Integer
    iTotalRows = src.Worksheets("download").Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).Rows.Count

    Dim iCnt As Integer
    For iCnt = 1 To iTotalRows
        Worksheets("Elszamolas").Range("B" & iCnt).Formula = src.Worksheets("download").Range("B" & iCnt).Formula
    Next iCnt
End Sub

这是我目前所拥有的。我想从文件下载表下载复制到文件napiElszamolas表Elszamolas。运行脚本时,出现“下标超出范围”“运行时错误9”。

1 个答案:

答案 0 :(得分:0)

您可能会遇到范围不合格的问题,以下代码已对此问题进行了纠正。请尝试一下!如果这不起作用,我的猜测是您在代码中编写的工作表名称与工作簿中实际存在的工作表名称之间存在较小的不匹配。

代码也已更新为使工作表变量变暗以提高可读性,并使用更标准的最后一行(LR)计算和循环名(i)。

Option Explicit

Private Sub CommandButton1_Click()

Dim src As Workbook: Set src = Workbooks.Open("C:\Users\gregg\Downloads\download.xls", True, True)
Dim DL As Worksheet: Set DL = src.Sheets("download")
Dim EZ As Worksheet: Set EZ = src.Sheets("Elszamolas")

Dim i As Long

For i = 1 To DL.Range("B" & DL.Rows.Count).End(xlUp).Row
    EZ.Range("B" & i).Formula = DL.Range("B" & i).Formula
Next i

End Sub