这是另一个“当它不起作用时这么简单它令人抓狂”的类型问题。
下面有一个宏。它基于一个与C3相关联的ActiveX组合框。当用户进行选择时,宏应该在另一个工作表上找到该选择,识别isbn(在第2列中),并返回到原始工作表以将其粘贴到适当的单元格(C4)中。
单步执行,会在isbn.Select中抛出“Object Required”错误。
我确信这很简单。永远是。你能帮我一把吗?
Private Sub TitleSelection_Change()
Dim lookFor As Range
Dim rng As Range
Dim isbn As Variant
Set lookFor = Sheets("AAP Dashboard").Range("C3")
Set rng = Sheets("Books").Columns("A:I")
isbn = Application.VLookup(lookFor, rng, 2)
Application.ScreenUpdating = False
isbn.Select
Selection.Copy
Sheets("AAP Dashboard").Range("C4").Select
Selection.Copy
ActiveSheet.Paste
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:2)
您可以稍微修改代码以获得所需的结果:
Set lookFor = Sheets("AAP Dashboard").Range("C3")
Set Rng = Sheets("Books").Columns("A:I")
isbn = Application.Match(lookFor, Rng.Columns(1))
If Not IsError(isbn) Then
Rng.Cells(isbn, 1).Select
'your code here
End If
顺便说一下,尽量避免Select
和Active...
语句(how to avoid them)
答案 1 :(得分:2)
您无法选择isbn,因为它是变体对象,它没有该成员。
尝试:
Dim lookFor As Variant
Dim rng As Range
Dim isbn As Variant
lookFor = Sheets("AAP Dashboard").Range("C3").Value
Set rng = Sheets("Books").Columns("A:I")
isbn = Application.WorksheetFunction.VLookup(lookFor, rng, 2, FALSE)
Application.ScreenUpdating = False
Sheets("AAP Dashboard").Range("C4").Value = isbn
Application.ScreenUpdating = True
我认为你缺少Application和Vlookup之间的对象,添加“WorksheetFunction”。另请注意,vlookup返回它在第2列中找到的值,因此无需复制和粘贴。最后请注意,Vlookup的第一个参数是一个值而不是一个范围对象,因此我将lookFor更改为Variant