Страницы: 1
RSS
Как передать объект Range в метод класса ?
 
Создаю класс, в котором будет метод. Метод считает количество строк в диапазон Range. Ниже наброски кода, подскажите, как из модуля передать Range в метод класса ?

Класс:
Код
Option Explicit
Private pDatabaseSheet As Object
Private pCalculatorSheet As Object
Public Property Let DatabaseSheet(DatabaseSheet As Object)
    pDatabaseSheet = DatabaseSheet
End Property

Public Function Calculate()
    Dim testRange As Range
    'Set testRange = pDatabaseSheet - незнаю как передать Range из Модуля
    Set testRange = Workbooks("TestData.xlsx").Worksheets("Лист").Range("A3:AE9") 'Так таботат
    Debug.Print testRange.Rows.Count
End Function 
Модуль:
Код
Option Explicit
Sub Main()
    Dim Document As New Document
    Set Document.DatabaseSheet = Workbooks("TestData.xlsx").Worksheets("Лист").Range("A3:AE9")
    Document.Calculate
End Sub
Ошибку пишет Invalid use of property. Как я понимаю, ошибка именно в модуле, при передаче..
Изменено: dimm - 23.11.2015 16:08:45
 
Не совсем понял. Зачем у Вас
Function Calculate
?
Ведь она дублирует стандартный метод листа и диапазона. Может возникнуть неоднозначность и конфликт.
При этом ничего Вы не передаете. Вы почему-то инициализируете внутри функции новый объект Range.
И уж тем более непонятно зачем понабилось все это заворачивать в модуль класса? В чем необходимость?

Может Вы проект выложите?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ну, код в первом посте - это просто наброски.. В реале хотел инкапсулировать функцию, которая обрабатывает и переносит данные их одного файла в другой при помощи использования словаря ("Scripting.Dictionary"). По диапазону формирует словарь.. И в дальнейшем по ключу находит нужное значение и ставит его в нужное место. Использование словаря показалось мне удобным, исходя из структуры обрабатываемых данных и скорости обработки. Сам файл во вложении ниже..

Вот код функции со словарем:
Код
Public Function Calculate()
Dim dicData
Dim row As Long
Dim key As String
Dim id As String
Dim item As Long
Set dicData = CreateObject("Scripting.Dictionary")

With DatabaseSheet
    For row = 1 To .Rows.Count
        key = CStr(.Cells(row, 1).Value)
        item = CLng(.Cells(row, 13).Value)
        dicData.Add key, item
    Next
End With
    
With CalculatorSheet
    For row = 1 To .Rows.Count
        id = CStr(.Cells(row, 1).Value)
        .Cells(row, 13).Value = dicData.item(id)
    Next
End With
End Function 
Почему вынес функцию в отдельный класс - хочется поиграться с ооп и думаю что в дальнейшем программка усложнится.  Вопрос прежний: можно ли/и как передать Range в метод класса ?
Страницы: 1
Наверх