2017-09-28 7 views
0

Voici l'intégralité du code au cas où vous voulez le voir: https://pastebin.com/TbewRRCc. Mon problème est qu'après vérification, ma collection est en effet composée uniquement des colonnes que je veux avoir. Donc, si j'ai trois colonnes, je veux être là, columnsToCopy.Count will = 3, aussi quand je copie juste columnToCopy (3). Copier le résultat sera juste une colonne. Mais quand je traverse la boucle pour faire une union de ces trois colonnes, toutes les colonnes entre ces colonnes seront également dans l'union.Union saisit toutes les plages entre mes sélections

Par exemple. Dites que je copie les colonnes 1, 13 et 30. La table collée sera toutes les colonnes de 1 à 30. Ce n'est pas ce que je veux. Je veux seulement la colonne 1,13, et 30 ... Donc trois colonnes au total pour cette Colelction particulière.

Des idées sur ce qui peut causer mon problème, et comment le réparer?

  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    

Répondre

1

Sur la base de votre explication (collection ne contenant que les colonnes que vous voulez), cela fonctionne pour moi


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 

Je viens de modifier la boucle for pour démarrer à partir 2 et réalisé la pâte sur la même ligne que la copie

+0

Donc, vous dites que lorsque vous collez cela, il ne colle que 3 colonnes? Colonnes 1, 3 et 5? Je ne comprends vraiment pas pourquoi ça ne marche pas pour moi alors ... Serais-je capable de télécharger les fichiers avec lesquels je travaille pour que vous puissiez voir de quoi je parle? – Pinlop

+0

[Diapositive PPT Virus Scan] (https://www.virustotal.com/#/file/ff5125e3234eb4795dbd330be554dbc90197eafb60cea1cf036da9389a92165f/detection), [Fichier Excel Virus Scan] (https://www.virustotal.com/#/file/24d41c015f53fe0621d91a0db8661701b6e858e98edc9e961f703e1da8706a58/ détection), [Fichier PPT Slide] (https://filetea.me/n3wZluzhVXFTpmjlUPmTxzKew), [Fichier Excel] (https://filetea.me/n3wG3zbxnKoRuuYhonhFf7PHQ) – Pinlop