【问题标题】:Assign a group of cells, defined on execution, to a range将一组在执行时定义的单元格分配给一个范围
【发布时间】:2019-03-15 12:18:30
【问题描述】:

我正在尝试将两个工作簿的两行中的一组单元格分配给两个范围。此信息用于执行comparison of the contents of both workbooks rows by ID

我尝试使用“with”语句。

Dim aWorkbookBInfo() As Variant, aWorkbookAInfo() As Variant, rngWorkbookBToCompare As Range, rngWorkbookAToCompare As Range
Dim SumToCheck As Integer, FoundCell As Range, aCellValues() As Integer
ReDim aCellValues(LastSheetColumn - 1)
ReDim aWorkbookBInfo(LastSheetColumn - 1)
ReDim aWorkbookAInfo(LastSheetColumn - 1)
For i = 2 To LastSheetRow
    Set FoundCell = Workbooks(WorkbookA).Sheets(SheetNameFromArray).Range("A:A").Find(What:=Workbooks(WorkbookB).Sheets(SheetNameFromArray).Cells(i, 1).Value)
    If Not FoundCell Is Nothing Then
        aCellValues(0) = 1
        Workbooks(WorkbookB).Sheets(SheetNameFromArray).Cells(i, LastSheetColumn + 1).Value = FoundCell.Row
        With Workbooks(WorkbookB).Sheets(SheetNameFromArray)
            Set rngWorkbookBToCompare = Range(Cells(i, 2), Cells(i, LastSheetColumn))
        End With
        With Workbooks(WorkbookA).Sheets(SheetNameFromArray)
            Set rngWorkbookAToCompare = Range(Cells(FoundCell.Row, 2), Cells(FoundCell.Row, LastSheetColumn))
        End With
        aWorkbookBInfo = rngWorkbookBToCompare
        aWorkbookAInfo = rngWorkbookAToCompare
        For j = 1 To LastSheetColumn - 1
            If aWorkbookBInfo(1, j) = aWorkbookAInfo(1, j) Then
                aCellValues(j) = 1 
            Else
                aCellValues(j) = 0
            End If
        Next j
    Else
    End If
Next i 

我想存储两个工作簿中的单元组的内容而不激活它们,因为我相信这个过程会更快。

我尝试只获取活动工作簿的信息,而不是两个工作簿。

【问题讨论】:

    标签: excel vba range row


    【解决方案1】:

    RangeCells 引用之前使用句点. 来完全限定With...End With 块中的Worksheet

    With Workbooks(WorkbookB).Sheets(SheetNameFromArray)
        Set rngWorkbookBToCompare = .Range(.Cells(i, 2), .Cells(i, LastSheetColumn))
    End With
    

    再说一遍:

    With Workbooks(WorkbookA).Sheets(SheetNameFromArray)
        Set rngWorkbookAToCompare = .Range(.Cells(FoundCell.Row, 2), .Cells(FoundCell.Row, LastSheetColumn))
    End With
    

    没有句点,With...End With 无效。 ActiveSheetActiveWorkbook 是隐含的,因为 RangeCells 调用不是完全限定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多