Для работы я создаю словарь, который берет информацию из таблицы Excel, которая содержит несколько кодов продуктов, а также даты производства и их соответствующие количества.Цель словаря - собрать все одинаковые коды в 1 строку и сложить значения в один ряд.Например, вот как мои данные в настоящее время выглядят
MON TUES WED THURS FRI
product 1 3 1 5
product 2 5 4 2
product 2 4 4 1
product 3 8
...
product n
И вот как я хочу, чтобы код отформатировал их,
MON TUES WED THURS FRI
product 1 2 3 4 5
product 2 9 8 3
product 3 8
...
product n
ЧтобыДля этого я сохранил несколько значений в одном ключе.Ключ - это код продукта, а даты производства - это позиции.Чтобы сохранить несколько значений в ключе, я использовал класс (используя этот сайт в качестве руководства).Я интенсивно использовал этот сайт, и это примеры, в качестве руководства я не делал этого ранее.
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь напечатать словарь, будь то Debug.Print или лист, я получаю ошибку «Требуется 424 объекта».Я не уверен, почему у меня возникает эта ошибка, поскольку я даже не могу проверить, правильно ли работает словарь.
Я просмотрел несколько сообщений ( 1 , 2 ) и сайты, чтобы попробовать разные методы циклического перебора ключей, чтобы посмотреть, дадут ли они другой результат (они этого не сделали).
Вот часть моего кода:
Option Explicit
Sub concatenateData()
Dim dictPC As Object
Dim productCodes As clsProductCodes
Dim wsCryovac As Worksheet
Dim PLU As Integer
Dim Friday As Integer
Dim Saturday As Integer
Dim Monday As Integer
Dim Tuesday As Integer
Dim Wednesday As Integer
Dim Thursday As Integer
Dim row As Long
Dim col As Long
Dim lrow As Long
Set dictPC = CreateObject("Scripting.Dictionary")
Set wsCryovac = ThisWorkbook.Sheets("Cryovac")
Set Sheet2 = ThisWorkbook.Sheets("Sheet2")
lrow = wsCryovac.Cells(Rows.Count, 1).End(xlUp).row
For row = 4 To lrow
PLU = wsCryovac.Cells(row, 1).Value2
Friday = wsCryovac.Cells(row, 2).Value2
Saturday = wsCryovac.Cells(row, 3).Value2
Monday = wsCryovac.Cells(row, 4).Value2
Tuesday = wsCryovac.Cells(row, 5).Value2
Wednesday = wsCryovac.Cells(row, 6).Value2
Thursday = wsCryovac.Cells(row, 7).Value2
If dictPC.Exists(PLU) = True Then
Set productCodes = dictPC(PLU)
Else
Set productCodes = New clsProductCodes
dictPC.Add PLU, productCodes
End If
dictPC(productCodes.PLU) = PLU
dictPC(productCodes.Friday) = dictPC(productCodes.Friday) + Friday
dictPC(productCodes.Saturday) = dictPC(productCodes.Saturday) + Saturday
dictPC(productCodes.Monday) = dictPC(productCodes.Monday) + Monday
dictPC(productCodes.Tuesday) = dictPC(productCodes.Tuesday) + Tuesday
dictPC(productCodes.Wednesday) = dictPC(productCodes.Wednesday) + Wednesday
dictPC(productCodes.Thursday) = dictPC(productCodes.Thursday) + Thursday
Next row
WriteToImmediate dictPC
End Sub
'This is where I attempt to check the dictionary information with code I used from:
'https://excelmacromastery.com/vbadictionary/#Example_2_8211_Dealing_with_Multiple_Values
Private Sub WriteToImmediate(dictPC As Dictionary)
Dim key As Variant, productCodes As clsProductCodes
' Read through the dictionary
For Each key In dictPC.Keys
Set productCodes = dictPC(key) 'I get the 424 error on this line
With productCodes
' Write to the Immediate Window (Ctrl + G)
Debug.Print .PLU, .Friday, .Saturday, .Monday, .Tuesday, .Wednesday, .Thursday
End With
Next key
End Sub
Повторюсь, у меня проблема в том, что я получаю "ошибку объекта 424", которую я не знаю, как ее исправить, отчасти из-за моей неопытности в использовании словаря.