Связывание объекта vb с конкретным листом

Я работаю с VB в Excel (Office 2010).

У меня есть класс под названием «Проблема» и код vb, который генерирует случайные проблемы, и для каждой проблемы создается новый рабочий лист и печатает параметры проблемы на этом листе.

когда я работаю над этим листом, мне нужны некоторые параметры, которые хранятся в экземпляре объекта Problem, который сгенерировал рабочий лист и динамически менял их.

то, что я хотел бы сделать, это связать экземпляр проблемы с ее листом, например:

Dim p as Problem Set p = new Problem Worksheet("Problem 1").**myCurrentProblem** = p 

а затем позже получить доступ к переменной myCurrentProblem

Есть ли способ сделать это?

заранее спасибо.

А как насчет наличия класса, например ProblemSheet, который свяжет листы и экземпляры проблем ? Эти экземпляры будут храниться в коллекции ProblemSheets . Пример (немного слишком длинный пример, но HTH).

Код этого учебника:

 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 
Давайте будем гением компьютера.