2015-04-08 2 views
0

Я пытаюсь использовать объект рабочего листа как свойство в модуле класса vba. Hers', что я имею в аа модуле класса под названием clsAgent:Каков правильный синтаксис для использования объекта как свойства класса в excel vba?

Public Property Get AgentSheet() As Worksheet 
    Set AgentSheet = pAgentSheet 
End Property 

' error thrown on next two lines 
Public Property Set AgentSheet(AgentSheet As Worksheet) 
    Set pAgentSheet = AgentSheet 
End Property 

Когда я использую в следующем коде я получаю ошибку `компилировать: Переменная не определена» брошенную в модуле класса:

Sub test_agent_class() 
Dim agent1 As clsAgent 
Set agent1 = New clsAgent 

agent1.AgentSheetName = "agentsFullOutput.csv" 

Set agent1.AgentSheet = Worksheets(agent1.AgentSheetName) 
Debug.Print agent1.AgentSheet.Name 

End Sub 

ответ

0

Пожалуйста, попробуйте добавить в ваш файл модуля clsAgent следующую строку:

Dim pAgentSheet As Worksheet

, поскольку свойства у вас есть Crea ted должен ссылаться на существующее поле pAgentSheet модуля clsAgent.

Пожалуйста, попробуйте также измененный файл тест:

Sub test_agent_class() 

    Dim agent1 As clsAgent 
    Set agent1 = New clsAgent 

    Set agent1.AgentSheet = Worksheets("agentsFullOutput.csv") 
    Debug.Print agent1.AgentSheet.Name 

End Sub 

Я не уверен на 100%, но это выглядело, как вы были ссылки на переменную/свойства AgentSheetName, которые не существуют в модуле clsAgent класса.

Надеюсь, это поможет хотя бы слегка.