Ключ уже связан с элементом - PullRequest
0 голосов
/ 26 февраля 2019

Я использую этот макрос более двух лет.Ничего не изменилось, пока у меня не вышло обновление от Microsoft.Сейчас я получаю сообщение об ошибке 457 - этот ключ уже назначен элементу этой коллекции.Я разместил модуль класса, а также макрос.Ошибка вызвана кодом "colCombData.Add cCombData, CStr (cCombData.ColA)". Может кто-нибудь пролить свет на то, как исправить эту проблему.

Option Explicit
Private pColA As String
Private pColB As String
Private pColCConcat As String
Private pColHConcat As String
Private pColIConcat As String
Private pColJConcat As String
Private pColKConcat As String
Private pColLConcat As String
'step 1 A
Public Property Get ColA() As String
    ColA = pColA
End Property
'step 2 A
Public Property Let ColA(Value As String)
    pColA = Value
End Property

'step 1 B
Public Property Get ColB() As String
    ColB = pColB
End Property
'step 2 B
Public Property Let ColB(Value As String)
    pColB = Value
End Property

'step 1 concat C
Public Property Get ColCConcat() As String
    ColCConcat = pColCConcat
End Property

'step 2 concat C
Public Property Let ColCConcat(Value As String)
    pColCConcat = Value
End Property

'step 1 concat H
Public Property Get ColHConcat() As String
    ColHConcat = pColHConcat
End Property

'step 2 concat H
Public Property Let ColHConcat(Value As String)
    pColHConcat = Value
End Property

'step 1 concat J
Public Property Get ColJConcat() As String
    ColJConcat = pColJConcat
End Property

'step 2 concat J
Public Property Let ColJConcat(Value As String)
    pColJConcat = Value
End Property

'step 1 concat I
Public Property Get ColIConcat() As String
    ColIConcat = pColIConcat
End Property

'step 2 concat I
Public Property Let ColIConcat(Value As String)
    pColIConcat = Value
End Property

'step 1 concat K
Public Property Get ColKConcat() As String
    ColKConcat = pColKConcat
End Property

'step 2 concat K
Public Property Let ColKConcat(Value As String)
    pColKConcat = Value
End Property

'step 1 concat L
Public Property Get ColLConcat() As String
    ColLConcat = pColLConcat
End Property

'step 2 concat L
Public Property Let ColLConcat(Value As String)
    pColLConcat = Value
End Property


    Option Explicit
Sub CombineData()
    Dim cCombData As Combdata
    Dim colCombData As Collection
    Dim V As Variant
    Dim vRes() As Variant 'Results Array
    Dim rRes As Range   'Location of results
    Dim I As Long

'read source data into array
V = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(columnsize:=13)

'Set results range.  Here it is set below the Source Data
'Could be anyplace, even on a different worksheet; or could overlay the
'  original.  Area below and to right is cleared
    Sheets.Add After:=Sheets(Sheets.Count)
    Set rRes = Sheets(Sheets.Count).Range("A1")

Range(rRes, rRes.SpecialCells(xlCellTypeLastCell)).Clear

'code to grab all data that will be used
Set colCombData = New Collection
On Error Resume Next
For I = 1 To UBound(V)
    Set cCombData = New Combdata
    cCombData.ColA = V(I, 1)
    cCombData.ColB = V(I, 2)
    cCombData.ColCConcat = V(I, 3)
    cCombData.ColHConcat = V(I, 7)
    cCombData.ColIConcat = V(I, 8)
    cCombData.ColJConcat = V(I, 9)
    cCombData.ColKConcat = V(I, 10)
    cCombData.ColLConcat = V(I, 11)
    colCombData.Add cCombData, CStr(cCombData.ColA) < ---Error line

    'if statement to concatenate specified columns
    If Err.Number <> 0 Then
        Err.Clear
        With colCombData(cCombData.ColA)
            .ColCConcat = .ColCConcat & ", " & Chr(10) & V(I, 3)
            .ColHConcat = .ColHConcat & ", " & Chr(10) & V(I, 7)
            .ColIConcat = .ColIConcat & ", " & Chr(10) & V(I, 8)
            .ColJConcat = .ColJConcat & ", " & Chr(10) & V(I, 9)
            .ColKConcat = .ColKConcat & ", " & Chr(10) & V(I, 10)
            .ColLConcat = .ColLConcat & ", " & Chr(10) & V(I, 11)
        End With
    End If
Next I
On Error GoTo 0

'code to write new data in specified location
ReDim vRes(1 To colCombData.Count, 1 To 13)
For I = 1 To UBound(vRes)
    With colCombData(I)
        vRes(I, 1) = .ColA
        vRes(I, 2) = .ColB
        vRes(I, 3) = .ColCConcat
        vRes(I, 7) = .ColHConcat
        vRes(I, 8) = .ColIConcat
        vRes(I, 9) = .ColJConcat
        vRes(I, 10) = .ColKConcat
        vRes(I, 11) = .ColLConcat
    End With
Next I

rRes.Resize(UBound(vRes, 1), UBound(vRes, 2)) = vRes


'formatting
 With rRes


  .Range("A1:K1").Interior.ColorIndex = 48
  .Range("A1:K1").Font.Bold = True

  .Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(columnsize:=13).VerticalAlignment = xlTop
  .Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(columnsize:=11).Borders.LineStyle = xlContinuous
  .Range("A1:K1").VerticalAlignment = xlCenter
  .Range("A1:K1").HorizontalAlignment = xlCenter

    Columns("a:a").ColumnWidth = 16.57
    Columns("B:B").ColumnWidth = 13.71
    Columns("C:C").ColumnWidth = 8.43
    Columns("G:G").ColumnWidth = 7.29
    Columns("H:H").ColumnWidth = 15.43
    Columns("I:I").ColumnWidth = 45
    Columns("J:J").ColumnWidth = 13.57
    Columns("K:K").ColumnWidth = 15.43
    Rows(2).RowHeight = 100
    .Range("D:F").EntireColumn.Delete
 End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...