2014-04-01 65 views
0

我用VB在Excel工作(辦公室2010)。關聯一個VB對象到特定工作

我有一個類叫做問題和產生隨機的問題,每個問題創建一個新的工作表並打印問題的參數到工作表中的VB代碼。

時,我對工作表工作

,我需要一些存儲在生成工作表中的問題對象的實例,並動態地改變它們的參數。

我想要做的是什麼問題的一個實例,其工作 類似關聯:

Dim p as Problem 

Set p = new Problem 

Worksheet("Problem 1").**myCurrentProblem** = p 

再後來就可以訪問變量myCurrentProblem

是有辦法去做?

在此先感謝。

+2

你能可能做到這一點的其他方式......在你的'Problem'類,存儲工作表變量,也許? –

+0

你是指對象的*類屬性*嗎? – Raystafarian

+0

我有一個函數,它需要一個Problem實例和一些我希望它從工作表中取出並計算出某些內容的數字。 這樣的事情: = myFunction(this_problem_instance,E5,D7) 但我不能訪問問題的實例,因爲我不知道它是哪一個。 我可以通過持有的問題和工作表全球收集傳遞,但我寧願它是否會被關聯到 – user1472066

回答

1

或者有什麼類的例如問題紙哪個會綁定表和問題實例?這些實例將存儲在的收集的ProblemSheets中。例子(有點太長的例子,但HTH)。

ThisWorkbook類代碼:

Private m_problemSheets As Collection 

Public Sub AddProblemSheet(problemSheetParameter As ProblemSheet) 
    If m_problemSheets Is Nothing Then _ 
     Set m_problemSheets = New Collection 
    m_problemSheets.Add problemSheetParameter, problemSheetParameter.SheetInstance.Name 
End Sub 

Public Function ProblemOfSheet(sheetName As String) As ProblemSheet 
    On Error Resume Next 
    Set ProblemOfSheet = m_problemSheets(sheetName) 
    On Error GoTo 0 
End Function 

Private Sub Workbook_Open() 
    Set m_problemSheets = New Collection 
End Sub 

問題類模塊:(只是爲了測試目的)

Public Name As String 

ProblemSheet類模塊:

Private m_problem As Problem 
Private m_sheet As Worksheet 

Public Sub Bind(problemParametr As Problem, sheetParameter As Worksheet) 
    Set m_problem = problemParametr 
    Set m_sheet = sheetParameter 
End Sub 

Public Property Get ProblemInstance() As Problem 
    Set ProblemInstance = m_problem 
End Property 

Public Property Set ProblemInstance(newProblem As Problem) 
    Set m_problem = newProblem 
End Property 

Public Property Get SheetInstance() As Worksheet 
    Set SheetInstance = m_sheet 
End Property 

標準模塊代碼:

Sub test() 
    Dim i As Integer 
    Dim newProblem As Problem 
    Dim newProblemSheet As ProblemSheet 



    ' add data to collection first 
    For i = 1 To Worksheets.Count 
     Set newProblem = New Problem 
     newProblem.Name = "Problem_" & i 

     Set newProblemSheet = New ProblemSheet 
     newProblemSheet.Bind newProblem, Worksheets(i) 

     ThisWorkbook.AddProblemSheet newProblemSheet 
    Next 


    ' get problem from collection by sheet name 
    Dim ps As ProblemSheet 
    Set ps = ThisWorkbook.ProblemOfSheet(Worksheets("Problem 1").Name) 

    If Not ps Is Nothing Then _ 
     Debug.Print ps.ProblemInstance.Name 



    ' set problem instance to another problem :-) 
    Dim myCurrentProblem As Problem 

    Set myCurrentProblem = New Problem 
    myCurrentProblem.Name = "myCurrentProblem 1" 
    Set ThisWorkbook.ProblemOfSheet(Worksheets("Problem 1").Name).ProblemInstance = myCurrentProblem 

    Debug.Print ThisWorkbook.ProblemOfSheet(Worksheets("Problem 1").Name).ProblemInstance.Name 
End Sub 
相關問題