Excel VBA For Each循环给出超出范围的错误

时间:2018-07-27 13:03:23

标签: vba excel-vba for-loop

我有2个工作簿处于打开状态,并且我正在尝试根据条件将一个单元格的一个单元格区域复制到另一个工作簿中。程序在

的第一个For Each循环中不断中断
  

下标超出范围

错误,我不知道为什么。

我在这里查看了其他线程,他们说该错误来自没有Open工作簿。我实现了它,但它仍然给我这个错误。

我是VBA的新手。有什么想法吗?

Sub TransferCells()
    Dim aggrange As Range
    Dim AnalyticalCell As Range
    Dim BatchCell As Range
    Dim analyticalwb, batchwb As Excel.Workbook
    Dim SEHPLC, CultureDay As Worksheet

    Set analyticalwb = Workbooks.Open("\\ntucsmafps06.na.jn.com\Hom$\APachall\Ta Big Data\Cas tical Results (4).xlsm")
    Set batchwb = Workbooks.Open("\\nctusmafp0s6.na.jn.com\Hom$\APachall\Ta Big Data\20180420_Fed Batch All Data_0.xlsx")

    For Each AnalyticalCell In analyticalwb.Worksheets("SE-HPLC").Range("A1:A87")
        For Each BatchCell In batchwb.Worksheets("Sheet3").Range("A2:A125271")
            If AnalyticalCell.Value = BatchCell.Value Then
                Set aggrange = Range(ActiveCell.Offset(0, 11), ActiveCell.Offset(0, 13))
                aggrange.Copy (Destination = Application.Workbooks("20180420_Fed Batch All Data_0.xlsx").Worksheets("Sheet3").Range(ActiveCell.Offset(0, 3), ActiveCell.Offset(0, 5)))
            End If
        Next BatchCell
    Next AnalyticalCell
End Sub

1 个答案:

答案 0 :(得分:1)

将有问题的代码更改为以下代码。那里有2个错误:

With Worksheets(ActiveCell.Parent.Name)
    aggrange.Copy Destination:=Application.Workbooks("20180420_Fed Batch All Data_0.xlsx").Worksheets("Sheet3").Range(.Cells(ActiveCell.Offset(0, 3)), .Cells(ActiveCell.Offset(0, 5)))
End With
  1. 目的地是一个命名参数,因此应该使用:=而不是=来传递;

  1. 要传递基于两个单元格的范围,您需要传递:

Range(.Cells(ActiveCell.Offset(0, 3)), .Cells(ActiveCell.Offset(0, 5)))而非Range()Range()将字符串作为参数。


  1. 其他想法-Dim应该针对每个变量完成。在其他语言(C ++等)中也可以,在中则存在一些问题:

Dim analyticalwb As Excel.Workbook, batchwb As Excel.Workbook
Dim SEHPLC As Worksheet, CultureDay As Worksheet

  1. How to avoid using Select in Excel VBA

  1. 在模块顶部写上Option Explicit,看看它是否可以编译。