Excel 在单元格范围内循环

Excel 在单元格范围内循环,excel,vba,for-loop,Excel,Vba,For Loop,代码旨在循环指定范围内的所有单元格。下面是代码的一部分。在for循环中使用Rng似乎有错误。当Rng替换为指定范围时,例如范围(“A1:B20”),它可以工作,但代码在 Cells(cell2.Row, LastCol1 + 1) = Application.VLookup(Range("A2:A1000"), strFileToOpen.Range("A10:C10000"), 3) Dim Rng、小区、小区1、小区2作为范围 Dim strFile

代码旨在循环指定范围内的所有单元格。下面是代码的一部分。在for循环中使用
Rng
似乎有错误。当
Rng
替换为指定范围时,例如
范围(“A1:B20”)
,它可以工作,但代码在

Cells(cell2.Row, LastCol1 + 1) = Application.VLookup(Range("A2:A1000"), strFileToOpen.Range("A10:C10000"), 3)
Dim Rng、小区、小区1、小区2作为范围
Dim strFileToOpen作为变型
strFileToOpen=Application.GetOpenFilename_
(标题:=“请选择文件”_
FileFilter:=“Excel文件*.xls*(*.xls*),”)
如果strFileToOpen=False,则
MsgBox“未选择任何文件”,VBE感叹号,“抱歉!”
出口接头
其他的
工作簿。打开的文件名:=strFileToOpen
如果结束
LastRow=单元格(Rows.Count,1).End(xlUp).Row
Rng=范围(单元格(5,2),单元格(LastRow,LastCol))
对于Rng中的每个单元格2
如果修剪(单元格2.值)“,则
单元格(cell2.Row,LastCol1+1)=Application.VLookup(范围(“A2:A1000”),strFileToOpen.Range(“A10:C10000”),3)
如果结束
下一个

请注意,
Dim Rng,cell,cell1,cell2作为范围
仅声明
cell2作为范围
,但
Rng,cell,cell1
作为变量在VBA中,您需要为每个变量指定一个类型,否则默认为
Variant

Dim Rng As Range, cell As Range, cell1 As Range, cell2 As Range
此外,
Rng
是一个
对象,因此必须使用
Set

Set Rng = Range(Cells(5, 2), Cells(LastRow, LastCol))
最后,请确保使用
选项Explicit
,因为变量
LastCol1
LastCol
未定义,因此被视为
0
,但列
0
不存在,计数从
1
开始

确保使用有意义的变量名。像
cell
cell1
cell2
这样的名字对每个程序员来说都是一场噩梦。无论何时,您需要对变量名进行编号,您都可以确定您做错了

最后,变量strFileToOpen
只是文件的路径,因为
应用程序.GetOpenFilename
只返回一个
字符串。而
字符串
没有
范围
,因此
strFileToOpen.Range(“A10:C10000”)
无法工作

因此,您需要执行以下操作

Dim OpenedWorkbook As Workbook
Set OpenedWorkbook = Workbooks.Open(Filename:=strFileToOpen)
和使用

OpenedWorkbook.Worksheets("SpecifySheetName").Range("A10:C10000")
下面是这样的

Dim strFileToOpen As Variant
strFileToOpen = Application.GetOpenFilename( _
                Title:="Please choose the File", _
                FileFilter:="Excel Files *.xls* (*.xls*),")

If strFileToOpen = False Then
    MsgBox "No file selected.", vbExclamation, "Sorry!"
    Exit Sub
Else
    Dim OpenedWorkbook As Workbook
    Set OpenedWorkbook = Workbooks.Open(Filename:=strFileToOpen)
End If

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("SheetName") 'or ThisWorkbook.ActiveSheet if the sheet name is not defined

Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Dim WorkingRange As Range
Set WorkingRange = ws.Range(ws.Cells(5, 2), ws.Cells(LastRow, LastCol)) 'LastCol is not defined!
        
Dim Cell As Range        
For Each Cell In WorkingRange 
    If Trim(Cell.Value) <> vbNullString Then
        'LastCol is not defined!
        ws.Cells(Cell.Row, LastCol1 + 1) = Application.VLookup(ws.Range("A2:A1000"), OpenedWorkbook.Worksheet("DefineWorksheetName").Range("A10:C10000"), 3)
    End If
Next Cell
Dim strFileToOpen作为变量
strFileToOpen=Application.GetOpenFilename(_
标题:=“请选择文件”_
FileFilter:=“Excel文件*.xls*(*.xls*),”)
如果strFileToOpen=False,则
MsgBox“未选择任何文件”,VBE感叹号,“抱歉!”
出口接头
其他的
将打开的工作簿设置为工作簿
设置OpenedWorkbook=Workbooks.Open(文件名:=strFileToOpen)
如果结束
将ws设置为工作表
如果未定义工作表名称,则设置ws=ThisWorkbook.Worksheets(“SheetName”)或ThisWorkbook.ActiveSheet
最后一排一样长
LastRow=ws.Cells(ws.Rows.Count,1).End(xlUp).Row
将工作范围变暗为范围
Set WorkingRange=ws.Range(ws.Cells(5,2),ws.Cells(LastRow,LastCol))'未定义LastCol!
暗淡单元格作为范围
对于工作范围内的每个单元格
如果Trim(Cell.Value)vbNullString,则
'LastCol未定义!
ws.Cells(Cell.Row,LastCol1+1)=Application.VLookup(ws.Range(“A2:A1000”),OpenedWorkbook.worksheetname(“DefineWorksheetName”)。Range(“A10:C10000”),3)
如果结束
下一个细胞

我找到了这个问题的解决办法。请让我知道,如果有一个更有效的方式写下面

Cells(cellrng.Row, LastCol1 + 1).Formula = Application.VLookup(Cells(cellrng.Row, 1).Value, Workbooks("FileName.xlsx").Sheets("Sheet1").Range("A1:C10000"), 3, False)

最后一列变量实际上已定义,但仅包含代码的相关部分,以保持代码简短。在为上述每个变量指定类型之后,仍然存在上述问题中提到的错误。它在vlookup行中断。@AppleRange请查看我编辑的答案。
Cells(cellrng.Row, LastCol1 + 1).Formula = Application.VLookup(Cells(cellrng.Row, 1).Value, Workbooks("FileName.xlsx").Sheets("Sheet1").Range("A1:C10000"), 3, False)