Excel 在单元格范围内循环
代码旨在循环指定范围内的所有单元格。下面是代码的一部分。在for循环中使用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
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)