Проблема с поздне-связанными функциями - PullRequest
0 голосов
/ 29 августа 2018

Привет У меня есть следующий код:

Private Sub makeNewReports()


Dim wkSheet As Worksheet
Set wkSheet = ActiveWorkbook.Worksheets("Grades")

Dim i As Long

Dim myMap As Dictionary
Set myMap = New Dictionary


For i = 4 To 6 'wkSheet.Range("a1").End(xlToRight).Column - 1
    Dim myVals As dateValueItem
    myVals.total_value = wkSheet.Cells(2, i)
    myVals.items = wkSheet.Cells(1, i)
    myVals.student_value = wkSheet.Cells(4, i)
    myMap.Add wkSheet.Cells(3, i), myVals
Next i
End Sub

и следующий код для dateValueItem

Option Explicit

Public Type dateValueItem
      total_value As Long
      items As String
      student_value As Long
End Type

когда я запускаю приведенный выше код, я получаю проблему

'Ошибка компиляции: только определенные пользователем типы, определенные в модулях открытых объектов, могут быть принудительно преобразованы в вариант или из него или переданы в функции с поздней привязкой'

Я пытаюсь сопоставить 3 разных значения на конкретную дату; даты проводятся в третьем ряду. Строки 2 и 4 имеют числовые значения, а строка 1 имеет строковые значения. Надеюсь, что я смогу организовать все это вместе, чтобы я мог в конечном итоге связать описания и значения с датами.

1 Ответ

0 голосов
/ 29 августа 2018

Это может быть самый быстрый способ. Создайте класс и назовите его dateValueItem

Option Explicit

Public total_value As Long
Public items As String
Public student_value As Long

И измените свой код на

Option Explicit

Private Sub makeNewReports()
Dim wkSheet As Worksheet
    Set wkSheet = ActiveWorkbook.Worksheets("Grades")

    Dim i As Long

    Dim myMap As Dictionary
    Set myMap = New Dictionary

    Dim myVals As dateValueItem
    For i = 4 To 6    'wkSheet.Range("a1").End(xlToRight).Column - 1
        Set myVals = New dateValueItem
        myVals.total_value = wkSheet.Cells(2, i)
        myVals.items = wkSheet.Cells(1, i)
        myVals.student_value = wkSheet.Cells(4, i)
        myMap.Add wkSheet.Cells(3, i), myVals
    Next i
End Sub
...