Excel 如何删除错误方法';范围';对象的'-工作表';运行以下VBA代码时失败

Excel 如何删除错误方法';范围';对象的'-工作表';运行以下VBA代码时失败,excel,vba,Excel,Vba,我试图在一个工作表中编码vlookup值,但表数组在另一个工作表中。我在第行收到此运行时错误 “Set DataRange=Sourcesheet.Range(StartPoint,DownCel)” 因为您在以下方面没有“完整/完整”范围: Range(StartPoint, DownCel) 分解部件: Set StartPoint = Sourcesheet.Range("F2") 'This one will give you the starting point of your ra

我试图在一个工作表中编码vlookup值,但表数组在另一个工作表中。我在第行收到此运行时错误 “Set DataRange=Sourcesheet.Range(StartPoint,DownCel)”

因为您在以下方面没有“完整/完整”范围:

Range(StartPoint, DownCel)
分解部件:

Set StartPoint = Sourcesheet.Range("F2") 'This one will give you the starting point of your range i.e. both Column ("F") and Row ("2") location.
DownCel = StartPoint.End(xlDown).Row 'This will only give you "last" row (lets say 13).
因此,您目前正在撰写:

Sourcesheet.Range(StartPoint, DownCel) => Sourcesheet.Range("F2", 13).
改为:

Sourcesheet.Range(StartPoint, DownCel) => Sourcesheet.Range(StartPoint, "F" & DownCel)

要说明的示例代码:

Sub test()
Dim StartPoint As Range
Dim DataRange As Range

Set Sourcesheet = Worksheets("Sheet1")

Set StartPoint = Sourcesheet.Range("F2")
DownCel = StartPoint.End(xlDown).Row
Set DataRange = Sourcesheet.Range(StartPoint, "F" & DownCel)

DataRange.Select 'To visualize what Datarange will select

End Sub

通过两种方式使用“
”进行编辑:

Sub test()
Dim StartPoint As Range
Dim DataRange As Range
Dim wb As Workbook 'Alternative 1 & 2
Dim sht As Worksheet 'Alternative 1
Dim ws As Worksheet


Set Sourcesheet = Worksheets("Sheet1")

Set wb = ActiveWorkbook 'Alternative 1 & 2
Set sht = wb.Worksheets("Sheet1") 'Alternative 1


Set StartPoint = Sourcesheet.Range("F2")
DownCel = StartPoint.End(xlDown).Row
Set DataRange = Sourcesheet.Range(StartPoint, "F" & DownCel)

DataRange.Select 'To visualize what Datarange will select



With sht 'Alternative 1
With wb.Worksheets("GoldPending") 'Alternative 2

'Do stuff...

End With
End With

End Sub

StartPoint和DownCel在失败时的值是多少?如果其中一个为零,则它将失败。虽然不确定DownCel在您所写内容的上下文中是否可以为零,但您也从未在上面设置wb。请注意,在失败行中,您依赖于对范围变量的默认成员调用,如果该变量包含无效值,例如0或无法在可用行范围内隐式转换为数字的文本,或者如果为空,则将失败。感谢您的突出显示。我修改了我的代码。非常感谢你这样解释。非常清楚。我做了修改,现在代码运行良好,但现在我在wb.Sheets(“GoldPending”)中得到一个错误“下标超出范围”。我试图更改工作表的名称,但它不起作用。您需要声明wb2(
Set wb2=Workbooks.Open(Filename:=Filepath)
)。同样,您需要声明wb(
Set wb=Workbooks(“Book1.xlsx”)
),我使用Set wb=Activeworkbook测试了代码。我也按照你提到的方式设置。但它仍然给了我下标超出范围的错误。我认为最简单的方法是用wb.Sheets(“GoldPending”)替换:
,用wb.Worksheets(“GoldPending”)
。但实际上你可以用两种方式来做。我已经更新了我的答案,并向您展示了两种替代方法。
Sub test()
Dim StartPoint As Range
Dim DataRange As Range
Dim wb As Workbook 'Alternative 1 & 2
Dim sht As Worksheet 'Alternative 1
Dim ws As Worksheet


Set Sourcesheet = Worksheets("Sheet1")

Set wb = ActiveWorkbook 'Alternative 1 & 2
Set sht = wb.Worksheets("Sheet1") 'Alternative 1


Set StartPoint = Sourcesheet.Range("F2")
DownCel = StartPoint.End(xlDown).Row
Set DataRange = Sourcesheet.Range(StartPoint, "F" & DownCel)

DataRange.Select 'To visualize what Datarange will select



With sht 'Alternative 1
With wb.Worksheets("GoldPending") 'Alternative 2

'Do stuff...

End With
End With

End Sub