我试图在循环中使用相对引用。我的目标是使用索引和匹配组合来查找值,而与文件中存在的行数和列数无关。这是我到目前为止创建的,但它不起作用。存储在两张不同纸张上的数据相同。
Error msg: Run-time error '1004':
无法获取WorksheetFunction
类
子测试()
Dim ActSor As Long, ActOsz As Long
ActSor = ActiveSheet.UsedRange.Rows.Count
ActOsz = ActiveSheet.UsedRange.Columns.Count
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
Dim Rg As Range
Set Rg = ws2.Range("B2", Cells(ActSor, ActOsz))
Dim RgActOsz As Long
RgActOsz = Rg.Columns.Count
Dim i As Long , sor As Long
For i = 2 To RgActOsz
For sor = 2 To ActSor
Cells(sor, i).Value = Application.WorksheetFunction.Index(ws1.Columns(i),
Application.WorksheetFunction.Match(Cells(sor, 1), Rg.Columns(1), 0))
Next sor
Next i
End Sub
答案 0 :(得分:1)
Set Rg = ws2.Range("B2", Cells(ActSor, ActOsz))
这是禁止的。正确的语法:
Set Rg = Range( ws2.Range("B2"), ws2.Cells(ActSor, ActOsz))
这有帮助吗?
答案 1 :(得分:0)
每次使用Range()
对象时,都会使用隐式ActiveSheet.Range()
命令。如果要从中拉出值的工作表未激活,Range()
命令将给出错误的结果。
我的建议:
Range()
函数,例如ws1.Range()
。 Resize()
命令扩展到表格。例如,要选择单元格A2
以及接下来的100行和20列,请使用ws1.Range("A2").Resize(100,20)
。Cells()
,而是使用现有范围并使用Offset()
命令。从单元格A2
开始选择包含20列的表的 i 行,使用Range("A2").Offset(i-1,0).Resize(1,20)
Range("AccountsTable").Offset(i-1,0).Resize(1,20)