2017-09-28 2 views
0

Hier ist der gesamte Code, falls Sie es betrachten wollen: https://pastebin.com/TbewRRCc. Mein Problem ist, dass meine Sammlung nach der Überprüfung tatsächlich nur aus den Spalten besteht, die ich haben möchte. Also, wenn ich drei Spalten habe ich da drin sein will, wird columnsToCopy.Count = 3, auch wenn ich columnToCopy einfach kopieren (3) .Copy das Ergebnis wird nur eine Spalte sein. Aber wenn ich durch die Schleife gehe, um eine Union dieser drei Spalten zu bilden, werden alle Spalten zwischen diesen Spalten auch in der Vereinigung sein.Union greifen alle Bereiche zwischen meinen Selektionen

Zum Beispiel. Angenommen, ich kopiere die Spalten 1, 13 und 30. Der Einfügetableau wird alle Spalten von 1 bis 30 sein. Das möchte ich nicht. Ich will nur Spalte 1,13 und 30 ... also drei Spalten insgesamt für diese bestimmte Kolektion.

Irgendwelche Ideen auf, was mein Problem verursachen kann, und wie man es beheben?

  For arrayLoop = LBound(iq_Array) To UBound(iq_Array) 
       ' Take copy of potential ref and adjust to standard if required 
       checkStr = iq_Array(arrayLoop) 
       If hasIQs And Left(checkStr, 3) <> "iq_" Then checkStr = "iq_" & checkStr 

       ' Look for existence of corresponding column in local copy array 
       pCol = 0 
       For iCol = 2 To colNumb 
        If checkStr = IQRef(iCol) Then 
         pCol = iCol 
         Exit For 
        End If 
       Next iCol 

       If pCol > 0 Then 
        ' Paste the corresponding column into the forming table 
        columnsToCopy.Add ShRef.Columns(pCol).EntireColumn 
       End If 

      Next arrayLoop 

      If columnsToCopy.Count > 1 Then     'data was added 
       ' Copy table 

Dim unionVariable As Range 

Set unionVariable = columnsToCopy(1) 


For k = 1 To columnsToCopy.Count 
    Set unionVariable = xlApp.Union(unionVariable, columnsToCopy(k)) 
Next k 

unionVariable.Copy 
Next k 

unionVariable.Copy    

Antwort

1

Basierend auf Ihrer Erklärung (Sammlung nur die Spalten enthalten, möchten Sie) das für mich arbeitet


Option Explicit 

Public Sub TestUnion() 
    Dim ws1 As Worksheet, ws2 As Worksheet, k As Long 
    Dim unionVariable As Range, columnsToCopy As Collection 

    Set ws1 = Sheet1 
    Set ws2 = Sheet2 

    Set columnsToCopy = New Collection 

    columnsToCopy.Add ws1.UsedRange.Columns(1) 
    columnsToCopy.Add ws1.UsedRange.Columns(3) 
    columnsToCopy.Add ws1.UsedRange.Columns(5) 

    Set unionVariable = columnsToCopy(1) 

    For k = 2 To columnsToCopy.Count 
     Set unionVariable = Union(unionVariable, columnsToCopy(k)) 
    Next k 

    unionVariable.Copy ws2.Cells(1)  'copy AND paste 
End Sub 

Ich habe gerade die For-Schleife von 2 zu starten und durchgeführt die Paste in der gleichen Zeile wie die Kopie

+0

Sie sagen also, dass wenn Sie einfügen, fügt es nur 3 Spalten ein? Spalten 1, 3 und 5? Ich verstehe wirklich nicht, warum es dann für mich nicht funktioniert ... Wäre ich in der Lage, die Dateien hochzuladen, mit denen ich arbeite, damit Sie sehen können, worüber ich rede? – Pinlop

+0

[PPT-Folie Virus Scan] (https://www.virustotal.com/#/file/ff5125e3234eb4795dbd330be554dbc90197eafb60cea1cf036da9389a92165f/detection) [Excel File Virus Scan] (https://www.virustotal.com/#/file/24d41c015f53fe0621d91a0db8661701b6e858e98edc9e961f703e1da8706a58/ Erkennung), [PPT Slide-Datei] (https://filetea.me/n3wZluzhVXFTpmjlUPmTxzKew), [Excel-Datei] (https://filetea.me/n3wG3zbxnKoRuuYhonhFf7PHQ) – Pinlop