probleem met range

Status
Niet open voor verdere reacties.

piet19501

Gebruiker
Lid geworden
14 mrt 2019
Berichten
15
Goedemiddag,

Ik moet in VBA een userform maken die zorgt dat kolommen van plek verwisseld worden. De tabel bestaat altijd uit negen kolommen. In de userform heb ik gebruik gemaakt van comboknoppen die de getallen 1 t/m 9 bevatten, waarbij 1 kolom A is, 2 kolom B is etc. Ik wil ervoor zorgen dat als ik op de commandbutton klik de kolommen verwisselen.

Echter geeft dit een foutmelding:
Code:
rng = Range(Cells(1, ComboBox1.Value), Cells(10000, ComboBox1.Value))

Ik begrijp niet waarom. Overigens staat deze code op de plek waar gecodeerd wordt als je op de command button drukt. De variabele rng is hier ook gedeclareerd, net als de oorspronkelijke positie.

PS.Ik ben me ervan bewust dat andere manieren effectiever zijn dan een userform maar dat is niet de taak.
 
Laatst bewerkt:
Riekt als een schoolopdracht :). Dan mogen we hooguit in de juiste richting duwen, en dat is uiteraard ook geen enkel probleem. Alleen: dan moeten we op zijn minst de hele code zien, en niet één regel. Liever nog uiteraard het bestand, zodat we kunnen zien wat er nu echt aan de hand is.
 
Ondertussen heb ik de code aangepast. (Deel van de code wat het relevantst is: )

Code:
Sub CommandButton9_Click()
    Dim rng As Range
    Dim rng2 As Range
    Dim rng3 As Range
    Dim rng4 As Range
    Dim rng5 As Range
    Dim rng6 As Range
    Dim rng7 As Range
    Dim rng8 As Range
    Dim rng9 As Range
    
    Set rng = Columns("A")
    Set rng2 = Columns("B")
    Set rng3 = Columns("C")
    Set rng4 = Columns("D")
    Set rng5 = Columns("E")
    Set rng6 = Columns("F")
    Set rng7 = Columns("G")
    Set rng8 = Columns("H")
    Set rng9 = Columns("I")
    
    rng.Cut
    rng2.Cut
    rng3.Cut
    rng4.Cut
    rng5.Cut
    rng6.Cut
    rng7.Cut
    rng8.Cut
    rng9.Cut
    
    
    rng.Columns(ComboBox1.Value).Insert
    rng2.Columns(ComboBox2.Value).Insert
    rng3.Columns(ComboBox3.Value).Insert
    rng4.Columns(ComboBox4.Value).Insert
    rng5.Columns(ComboBox5.Value).Insert
    rng6.Columns(ComboBox6.Value).Insert
    rng7.Columns(ComboBox7.Value).Insert
    rng8.Columns(ComboBox8.Value).Insert
    rng9.Columns(ComboBox9.Value).Insert
    
End Sub

Ondertussen zijn in de userform de comboknoppen veranderd van de getallen 1 t/m 9 naar A t/m I. De kolommen veranderen nu wel van plek m.b.h. van de userform, alleen komen de kolommen niet op de plek te staan die ik aangeef met de userform. Waarschijnlijk komt dit omdat als je gebruik maakt van cut en insert twee kolommen van plek veranderen. Stel ik zeg dat kolom A naar kolom B moet, dan gaat B automatisch naar plek A. Hoe zou ik het zo kunnen aanpassen dat alle kolommen tegelijkertijd van plek veranderen?
 
Laatst bewerkt:
Doe ons een lol en zet je code tussen CODE tags; dat maakt het draadje een stuk leesbaarder. Volgens mij ben je de vraagstelling nu aan het veranderen. Je wilt (oorspronkelijk) kolommen verwisselen. Bijvoorbeeld kolom B naar C. Dan wordt kolom C automatisch kolom B, want C schuift naar links. De rest van de kolommen blijft dan uiteraard gewoon staan. Dus wat je nu wilt? Geen idee.
Maar begin eerst met bericht #3 aan te passen door je code correct op te maken :).
 
Heb je het proces trouwens al eens opgenomen met de Macro Recorder? Krijg je een aardig idee wat er eigenlijk gebeurt.
 
Doe ons een lol en zet je code tussen CODE tags; dat maakt het draadje een stuk leesbaarder.
Gedaan, zie vorig bericht. Hoop dat het nu leesbaarder is.

Dus wat je nu wilt? Geen idee.
Oke, ik zal het proberen duidelijker uit te leggen. Ik heb een opdracht van een bedrijf (eerstejaars HBO opdracht). Dit bedrijf ontvangt van allerlei verschillende bedrijven die spullen bij hem kopen excelbestanden met verkoopgegevens. Echter, de bedrijven zijn niet consistent in welke volgorde zij de kolommen plaatsen. Aan mij de taak om in VBA een userform te bouwen die ervoor zorgt dat in potentie alle 9 kolommen tegelijkertijd van plek veranderd kunnen worden. In de userform staan de letters A t/m I. Daaronder staan comboknoppen waar je kunt kiezen tussen A t/m I, waarna de oorspronkelijke kolom verplaatst wordt naar de waarde van de comboknop. Probleem is dat als ik in de userform op de commandbutton druk de kolommen niet op de plek komen te staan die aangegeven wordt in de userform. Persoonlijk denk ik dat dit fout gaat door cut en insert, maar ik weet goed hoe ik dit zou moeten oplossen. In mijn vorige bericht staat de code die zorgt dat de kolommen van plek veranderen, denk zelf dat daar het 'mankement' zit.
 
Laatst bewerkt:
Ondertussen heb ik het opgelost. Alleen is de code nogal lang. Iemand een idee hoe ik de code kan verkorten?

Code:
Sub CommandButton9_Click()
    Dim rng As Range
    Dim rng2 As Range
    Dim rng3 As Range
    Dim rng4 As Range
    Dim rng5 As Range
    Dim rng6 As Range
    Dim rng7 As Range
    Dim rng8 As Range
    Dim rng9 As Range
    Dim temp As Variant
    Dim temp2 As Variant
    Dim temp3 As Variant
    Dim temp4 As Variant
    Dim temp5 As Variant
    Dim temp6 As Variant
    Dim temp7 As Variant
    Dim temp8 As Variant
    Dim temp9 As Variant
    
    
    Set rng = Columns("A")
    Set rng2 = Columns("B")
    Set rng3 = Columns("C")
    Set rng4 = Columns("D")
    Set rng5 = Columns("E")
    Set rng6 = Columns("F")
    Set rng7 = Columns("G")
    Set rng8 = Columns("H")
    Set rng9 = Columns("I")
    
    If ComboBox1.Value = "B" Then
        temp = rng.Value
        rng.Value = rng2.Value
        rng2.Value = temp
    ElseIf ComboBox1.Value = "C" Then
        temp = rng.Value
        rng.Value = rng3.Value
        rng3.Value = temp
    ElseIf ComboBox1.Value = "D" Then
        temp = rng.Value
        rng.Value = rng4.Value
        rng4.Value = temp
    ElseIf ComboBox1.Value = "E" Then
        temp = rng.Value
        rng.Value = rng5.Value
        rng5.Value = temp
    ElseIf ComboBox1.Value = "F" Then
        temp = rng.Value
        rng.Value = rng6.Value
        rng6.Value = temp
    ElseIf ComboBox1.Value = "G" Then
        temp = rng.Value
        rng.Value = rng7.Value
        rng7.Value = temp
    ElseIf ComboBox1.Value = "H" Then
        temp = rng.Value
        rng.Value = rng8.Value
        rng8.Value = temp
    ElseIf ComboBox1.Value = "I" Then
        temp = rng.Value
        rng9.Value = rng9.Value
        rng9.Value = temp
    ElseIf ComboBox1.Value = "G" Then
        temp = rng.Value
        rng.Value = rng7.Value
        rng7.Value = temp
    End If
    
    If Not (ComboBox1.Value = "B") Then
        If ComboBox2.Value = "A" Then
           temp2 = rng2.Value
           rng2.Value = rng.Value
           rng.Value = temp
        ElseIf ComboBox2.Value = "C" Then
           temp2 = rng2.Value
           rng2.Value = rng3.Value
           rng3.Value = temp2
        ElseIf ComboBox2.Value = "D" Then
           temp2 = rng2.Value
           rng2.Value = rng4.Value
           rng4.Value = temp2
        ElseIf ComboBox2.Value = "E" Then
           temp2 = rng2.Value
           rng2.Value = rng5.Value
           rng5.Value = temp2
        ElseIf ComboBox2.Value = "F" Then
           temp2 = rng2.Value
           rng2.Value = rng6.Value
           rng6.Value = temp2
        ElseIf ComboBox2.Value = "G" Then
           temp2 = rng2.Value
           rng2.Value = rng7.Value
           rng7.Value = temp2
        ElseIf ComboBox2.Value = "H" Then
           temp2 = rng2.Value
           rng2.Value = rng8.Value
           rng8.Value = temp2
        ElseIf ComboBox2.Value = "I" Then
           temp2 = rng2.Value
           rng2.Value = rng7.Value
           rng7.Value = temp2
        End If
    End If

    If Not (ComboBox1.Value = "C" Or ComboBox2.Value = "C") Then
        If ComboBox3.Value = "A" Then
           temp3 = rng3.Value
           rng3.Value = rng.Value
           rng.Value = temp3
        ElseIf ComboBox3.Value = "B" Then
           temp3 = rng3.Value
           rng3.Value = rng2.Value
           rng2.Value = temp3
        ElseIf ComboBox3.Value = "D" Then
           temp3 = rng3.Value
           rng3.Value = rng4.Value
           rng4.Value = temp3
        ElseIf ComboBox3.Value = "E" Then
           temp3 = rng3.Value
           rng3.Value = rng5.Value
           rng5.Value = temp3
        ElseIf ComboBox3.Value = "F" Then
           temp3 = rng3.Value
           rng3.Value = rng6.Value
           rng6.Value = temp3
        ElseIf ComboBox3.Value = "G" Then
           temp3 = rng3.Value
           rng3.Value = rng7.Value
           rng7.Value = temp3
        ElseIf ComboBox3.Value = "H" Then
           temp3 = rng3.Value
           rng3.Value = rng8.Value
           rng8.Value = temp3
        ElseIf ComboBox3.Value = "I" Then
           temp3 = rng3.Value
           rng3.Value = rng9.Value
           rng9.Value = temp3
        End If
    End If

    If Not (ComboBox1.Value = "D" Or ComboBox2.Value = "D" Or ComboBox3.Value = "D") Then
        If ComboBox4.Value = "A" Then
            temp4 = rng4.Value
            rng4.Value = rng.Value
            rng.Value = temp4
        ElseIf ComboBox4.Value = "B" Then
            temp4 = rng4.Value
            rng4.Value = rng2.Value
            rng2.Value = temp4
        ElseIf ComboBox4.Value = "C" Then
            temp4 = rng4.Value
            rng4.Value = rng3.Value
            rng3.Value = temp4
        ElseIf ComboBox4.Value = "E" Then
            temp4 = rng4.Value
            rng4.Value = rng5.Value
            rng5.Value = temp4
        ElseIf ComboBox4.Value = "F" Then
            temp4 = rng4.Value
            rng4.Value = rng6.Value
            rng6.Value = temp4
        ElseIf ComboBox4.Value = "G" Then
            temp4 = rng4.Value
            rng4.Value = rng7.Value
            rng7.Value = temp4
        ElseIf ComboBox4.Value = "H" Then
            temp4 = rng4.Value
            rng4.Value = rng8.Value
            rng8.Value = temp4
        ElseIf ComboBox4.Value = "I" Then
            temp4 = rng4.Value
            rng4.Value = rng9.Value
            rng9.Value = temp4
        End If
    End If

    If Not (ComboBox1.Value = "E" Or ComboBox2.Value = "E" Or ComboBox3.Value = "E" Or ComboBox4.Value = "E") Then
        If ComboBox5.Value = "A" Then
            temp5 = rng5.Value
            rng5.Value = rng.Value
            rng.Value = temp5
        ElseIf ComboBox5.Value = "B" Then
            temp5 = rng5.Value
            rng5.Value = rng2.Value
            rng2.Value = temp5
        ElseIf ComboBox5.Value = "C" Then
            temp5 = rng5.Value
            rng5.Value = rng3.Value
            rng3.Value = temp5
        ElseIf ComboBox5.Value = "D" Then
            temp5 = rng5.Value
            rng5.Value = rng4.Value
            rng4.Value = temp5
        ElseIf ComboBox5.Value = "F" Then
            temp5 = rng5.Value
            rng5.Value = rng6.Value
            rng6.Value = temp5
        ElseIf ComboBox5.Value = "G" Then
            temp5 = rng5.Value
            rng5.Value = rng7.Value
            rng7.Value = temp5
        ElseIf ComboBox5.Value = "H" Then
            temp5 = rng5.Value
            rng5.Value = rng8.Value
            rng8.Value = temp5
        ElseIf ComboBox5.Value = "I" Then
            temp5 = rng5.Value
            rng5.Value = rng9.Value
            rng9.Value = temp5
        End If
    End If

    If Not (ComboBox1.Value = "F" Or ComboBox2.Value = "F" Or ComboBox3.Value = "F" Or ComboBox4.Value = "F" Or ComboBox5.Value = "F") Then
        If ComboBox6.Value = "A" Then
            temp6 = rng6.Value
            rng6.Value = rng.Value
            rng.Value = temp6
        ElseIf ComboBox6.Value = "B" Then
            temp6 = rng6.Value
            rng6.Value = rng2.Value
            rng2.Value = temp6
        ElseIf ComboBox6.Value = "C" Then
            temp6 = rng6.Value
            rng6.Value = rng3.Value
            rng3.Value = temp6
        ElseIf ComboBox6.Value = "D" Then
            temp6 = rng6.Value
            rng6.Value = rng4.Value
            rng4.Value = temp6
        ElseIf ComboBox6.Value = "E" Then
            temp6 = rng6.Value
            rng6.Value = rng5.Value
            rng5.Value = temp6
        ElseIf ComboBox6.Value = "G" Then
            temp6 = rng7.Value
            rng6.Value = rng7.Value
            rng7.Value = temp6
        ElseIf ComboBox6.Value = "H" Then
            temp6 = rng8.Value
            rng6.Value = rng8.Value
            rng8.Value = temp6
        ElseIf ComboBox6.Value = "I" Then
            temp6 = rng6.Value
            rng6.Value = rng9.Value
            rng9.Value = temp6
        End If
    End If

    If Not (ComboBox1.Value = "G" Or ComboBox2.Value = "G" Or ComboBox3.Value = "G" Or ComboBox4.Value = "G" Or ComboBox5.Value = "G" Or ComboBox6.Value = "G") Then
        If ComboBox7.Value = "A" Then
            temp7 = rng7.Value
            rng7.Value = rng.Value
            rng.Value = temp7
        ElseIf ComboBox7.Value = "B" Then
            temp7 = rng7.Value
            rng7.Value = rng2.Value
            rng2.Value = temp7
        ElseIf ComboBox7.Value = "C" Then
            temp7 = rng7.Value
            rng7.Value = rng3.Value
            rng3.Value = temp7
        ElseIf ComboBox7.Value = "D" Then
            temp7 = rng7.Value
            rng7.Value = rng4.Value
            rng4.Value = temp7
        ElseIf ComboBox7.Value = "E" Then
            temp7 = rng7.Value
            rng7.Value = rng5.Value
            rng5.Value = temp7
        ElseIf ComboBox7.Value = "F" Then
            temp7 = rng7.Value
            rng7.Value = rng5.Value
            rng5.Value = temp7
        ElseIf ComboBox7.Value = "H" Then
            temp7 = rng7.Value
            rng7.Value = rng8.Value
            rng8.Value = temp7
        ElseIf ComboBox7.Value = "I" Then
            temp7 = rng7.Value
            rng7.Value = rng9.Value
            rng2.Value = temp9
        End If
    End If

    If Not (ComboBox1.Value = "H" Or ComboBox2.Value = "H" Or ComboBox3.Value = "H" Or ComboBox4.Value = "H" Or ComboBox5.Value = "H" Or ComboBox6.Value = "H" Or ComboBox7.Value = "H") Then
        If ComboBox8.Value = "A" Then
            temp8 = rng8.Value
            rng8.Value = rng.Value
            rng.Value = temp8
        ElseIf ComboBox8.Value = "B" Then
            temp8 = rng8.Value
            rng8.Value = rng2.Value
            rng2.Value = temp8
        ElseIf ComboBox8.Value = "C" Then
            temp8 = rng8.Value
            rng8.Value = rng3.Value
            rng3.Value = temp8
        ElseIf ComboBox8.Value = "D" Then
            temp8 = rng8.Value
            rng8.Value = rng4.Value
            rng4.Value = temp8
        ElseIf ComboBox8.Value = "E" Then
            temp8 = rng8.Value
            rng8.Value = rng5.Value
            rng5.Value = temp8
        ElseIf ComboBox8.Value = "F" Then
            temp8 = rng8.Value
            rng8.Value = rng6.Value
            rng6.Value = temp8
        ElseIf ComboBox8.Value = "G" Then
            temp8 = rng8.Value
            rng8.Value = rng9.Value
            rng9.Value = temp8
        ElseIf ComboBox8.Value = "I" Then
            temp8 = rng8.Value
            rng8.Value = rng2.Value
            rng2.Value = temp8
        End If
    End If
    
    If Not (ComboBox1.Value = "I" Or ComboBox2.Value = "I" Or ComboBox3.Value = "H" Or ComboBox4.Value = "I" Or ComboBox5.Value = "H" Or ComboBox6.Value = "I" Or ComboBox7.Value = "I" Or ComboBox8.Value = "I") Then
        If ComboBox9.Value = "A" Then
            temp9 = rng9.Value
            rng9.Value = rng.Value
            rng.Value = temp9
        ElseIf ComboBox9.Value = "B" Then
            temp9 = rng9.Value
            rng9.Value = rng2.Value
            rng2.Value = temp9
        ElseIf ComboBox9.Value = "C" Then
            temp9 = rng9.Value
            rng9.Value = rng3.Value
            rng3.Value = temp9
        ElseIf ComboBox9.Value = "D" Then
            temp9 = rng9.Value
            rng9.Value = rng4.Value
            rng4.Value = temp9
        ElseIf ComboBox9.Value = "E" Then
            temp9 = rng9.Value
            rng9.Value = rng5.Value
            rng5.Value = temp9
        ElseIf ComboBox9.Value = "F" Then
            temp9 = rng9.Value
            rng9.Value = rng6.Value
            rng6.Value = temp9
        ElseIf ComboBox9.Value = "G" Then
            temp9 = rng9.Value
            rng9.Value = rng7.Value
            rng7.Value = temp9
        ElseIf ComboBox9.Value = "H" Then
            temp9 = rng9.Value
            rng9.Value = rng8.Value
            rng8.Value = temp9
        
        
        End If
    End If
        
        
    
End Sub
 
Hebben de kolommen wel dezelfde kolomkoppen? Of is er obv van de inhoud van de kolommen iets unieks te vinden? Het verwisselen is niet zo moeilijk. In het bestandje een voorbeeldje van hoe je de data kan inladen en bekijken en eventueel kan toewijzen aan een bepaalde kolom. Door het ontbreken van een een voorbeeldbestand heb ik het beperkt tot 4 kolommen en verder niets met de 'Ok- knop' gedaan.
 

Bijlagen

  • Hussel kolommen.xlsb
    21,1 KB · Weergaven: 30
Hebben de kolommen wel dezelfde kolomkoppen? Of is er obv van de inhoud van de kolommen iets unieks te vinden?
De inhoud van de kolommen verschilt inderdaad, de ene kolom bevat variabele type datum, de ander float, de ander string (als dat is wat jij bedoelt). Uiteindelijk moet ik de gehele kolom, inclusief kolomkop kunnen verplaatsen. Punt is dat ik heb gemerkt dat ik kolom A en B met elkaar kan verwisselen, maar als ik kolom C naar kolom A wil, kolom A naar kolom B en kolom B naar kolom C wil dat dat blijkbaar niet gaat (heb ik pas zojuist ontdekt.). Weet ook niet hoe ik dat op moet lossen.

Aangezien ik geen testbestand heb en ik weet dat het 9 kolommen zijn, heb ik maar in elke kolom een getal neergezet.

Dank voor de moeite, weet niet of ik iets fout doe, maar als ik de kolommen met jouw bestand wil verwisselen gebeurt er niks of krijg ik een foutmelding, maar kan aan mij liggen.
 

Bijlagen

  • vbakolommenverwisselen.xlsm
    25,9 KB · Weergaven: 29
Laatst bewerkt:
@cow18, wat ik heb gemerkt is dat als ik met jouw bestand twee kolommen verwissel waarvan een kolom een integer is en de ander een datum, dat na het verwisselen beide kolommen een datum wordt. Heb jij misschien een idee hoe je dit zou kunnen aanpassen? Oftewel, uiteindelijk moeten alle kolommen verwisseld kunnen worden ongeacht of de inhoud van de kolommen een getal, datum, string of valuta is. Ik begrijp dat dat uit mijn bestand niet duidelijk werd
 
Laatst bewerkt:
Tja, waarom zou ik deze vragen gesteld hebben?
Hebben de kolommen wel dezelfde kolomkoppen? Of is er obv van de inhoud van de kolommen iets unieks te vinden?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan