我在名为clsAgent
的类模块中有以下内容:
Option Explicit
Const AgentEmailCol = 9
Private pAgentSheetName As String
Private pIDRange As Range
Private pAgentID As String
Private pAgentEmail As String
Public Property Get AgentSheetName() As String
AgentSheetName = pAgentSheetName
End Property
Public Property Let AgentSheetName(AgentSheetName As String)
pAgentSheetName = AgentSheetName
End Property
Public Property Get IDRange() As Range
Set IDRange = pIDRange
End Property
Public Property Set IDRange(IDRange As Range)
Set pIDRange = IDRange
End Property
Public Property Get AgentID() As String
AgentID = pAgentID
End Property
Public Property Let AgentID(AgentID As String)
pAgentID = AgentID
End Property
Public Property Get AgentEmail() As String
AgentEmail = WorksheetFunction.VLookup(Me.AgentID, Me.IDRange, AgentEmailCol, False)
End Property
在名为clsWorkingRange
的班级中我有:
Option Explicit
Private pSheetName As String
Private pColNum As Integer
Private pTargetRange As Range
Public Property Get SheetName() As String
SheetName = pSheetName
End Property
Public Property Let SheetName(SheetName As String)
pSheetName = SheetName
End Property
Public Property Get ColNum() As Integer
ColNum = pColNum
End Property
Public Property Let ColNum(ColNum As Integer)
pColNum = ColNum
End Property
Public Property Get TargetRange() As Range
Set TargetRange = pTargetRange
End Property
Public Property Set TargetRange(TargetRange As Range)
Set pTargetRange = TargetRange
End Property
Private Function Get_Rows_Generic(work_sheet_get As String, column_num As Integer)
'worksheet is the name of a sheet in the form of a string
Dim ws As Worksheet: Set ws = Worksheets(work_sheet_get)
Dim rows_count As Long: rows_count = ws.Cells(rows.Count, column_num).End(xlUp).Row
Get_Rows_Generic = rows_count
End Function
Public Function set_range(sheet_name As String, col1 As Integer) As Range
' returns the range of a given column using all the rows in a street
Dim rows1 As Long
rows1 = Get_Rows_Generic(sheet_name, 1)
Dim range1 As Range ' range of first search
With Worksheets(sheet_name)
Set range1 = .Range(.Cells(1, col1), .Cells(rows1, col1)) ' set the range being searched first
End With
Set set_range = range1
End Function
我有一个名为clsWorkingSheet
的课程:
Option Explicit
Private pSheetName As String
Private pSheet As Worksheet
Public Property Get SheetName() As String
SheetName = pSheetName
End Property
Public Property Let SheetName(SheetName As String)
pSheetName = SheetName
End Property
Public Property Get Sheet() As Worksheet
Set Sheet = pSheet
End Property
Public Property Set Sheet(Sheet As Worksheet)
Set pSheet = Sheet
End Property
在一个单独的模块中,我有以下内容:
Sub test_agent_class()
Dim agent_Sheet As clsWorkingSheet
Set agent_Sheet = New clsWorkingSheet
agent_Sheet.SheetName = "agentsFullOutput.csv"
Set agent_Sheet.Sheet = Worksheets(agent_Sheet.SheetName)
Dim agent_Range As clsWorkingRange
Set agent_Range = New clsWorkingRange
Set agent_Range.TargetRange = agent_Range.set_range(agent_Sheet.SheetName, 1)
Dim agent_Individual As clsAgent
Set agent_Individual = New clsAgent
Set agent_Individual.IDRange = agent_Range.TargetRange
Debug.Print agent_Individual.IDRange.Address
agent_Individual.AgentID = "ObjectID(52d56512763f4a1c608b4753)"
Debug.Print agent_Individual.AgentID
Debug.Print agent_Individual.AgentEmail
end sub
我收到以下错误:Run-time error '1004': Method 'AgentEmail' of object 'clsAgent' failed
¸
答案 0 :(得分:0)
这里的一切看起来都很好。我自己测试了它,并且我认为你应该这样做。
我唯一看错的是,如果您的agent_Range.TargetRange
列少于9列,那么您在vlookup中查找的内容为Const AgentEmailCol = 9
看起来clsWorkingRange.set_range()
函数中的这一位只返回一列的范围。您无法在1列大小的范围内执行从第9列获取的vlookup
。您需要确保将agent_Range.TargetRange设置为至少9列宽的内容。检查Debug.Print agent_Individual.IDRange.Address
的输出以确认。