Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: niet aansluitende cellen leegmaken via VBA  (gelezen 12194 keer)

0 leden en 1 gast bekijken dit topic.

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #45 Gepost op: 06 augustus 2021, 20:58:48 »
dus.
Private Sub Worksheet_Deactivate()
 Unload UserForm1
End Sub
Of als je de reeds ingevoerde gegevens wilt behouden.
Private Sub Worksheet_Deactivate()
 UserForm1.hide
End Sub
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #46 Gepost op: 06 augustus 2021, 21:20:25 »
@Albert,

Ik vrees dat er ergens in het bestand en/of UF een eigenschap ofzo niet correct ingesteld staat want geen van beide codes die je aangereikt hebt lijkt te werken. Ik blijf het irriterende geluidsignaal krijgen als ik naar een ander werkblad wil gaan en kan het pas doen nadat ik de UF handmatig heb afgesloten.
Vreemd....

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #47 Gepost op: 06 augustus 2021, 21:35:25 »
Private Sub Worksheet_Activate()
UserForm1.Show vbModeless
End Sub

of in de eigenschappen van userform1: showmodal op False zetten
Groet,

Albert

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #48 Gepost op: 07 augustus 2021, 09:52:55 »
In de bijlage staat een voorbeeld waarbij verschillende ranges worden gebruikt voor de ComboBoxen.
Is gedaan aan de hand van ComboBox# nummers. Vervolgens kun je ze met Select Case gemakkelijk toewijzen aan een range.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #49 Gepost op: 07 augustus 2021, 10:27:27 »
@Veerj,

Hartelijk dank. _/-\o_

Ik ga ermee aan de slag en moest ik toch problemen tegen komen dan laat ik het hier wel weten.


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #50 Gepost op: 07 augustus 2021, 10:35:29 »
Ik heb ook weer iets bijgeleerd.  :thumbsup:
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #51 Gepost op: 08 augustus 2021, 08:18:34 »
In de bijlage staat een voorbeeld waarbij verschillende ranges worden gebruikt voor de ComboBoxen.
Is gedaan aan de hand van ComboBox# nummers. Vervolgens kun je ze met Select Case gemakkelijk toewijzen aan een range.

Dag Veerj,

Ik heb jouw voorbeeld toegepast op mijn bestand, so far so good, maar nu zit ik vast bij de heropbouw van onderstaande code (was opgebouwd voor de versie ZONDER UserForm) :
With Sheets("inhoud keuzelijsten").ListObjects("tabelnaam")
            If Not IsNumeric(Application.Match(Sheets("INPUT").ComboBox#.Text, .DataBodyRange, 0)) Then
            .ListRows.Add.Range = Sheets("INPUT").ComboBox#.Text
            .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
            End If
        End With

Kan dit ook dusdanig opgebouwd worden via een Select Case o.d. om via één codeblok de drie keuzelijsten te laten bijwerken per keuzelijst voor alle comboboxen ineens die gelinkt zijn aan dezelfde keuzelijst?
Ik raak er zelf niet goed uit.

groetjes,
BlackDevil

***edit***
Toen ik naar mijn bestand ging om te kijken hoe ik eventueel de code zou kunnen opbouwen voor het aanvullen van de keuzelijsten blijkt dat ik in de UserForm in de comboboxen totaal niets kan invullen, ook de 'dropdown' blijft leeg.
Wat heb ik verkeerd gedaan? Heb gewoon jouw voorbeeld genomen en aangepast aan mijn bestand waar nodig....
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #52 Gepost op: 08 augustus 2021, 11:54:39 »
Ik doe een poging als het mag.
Dacht eerst aan Combo_AfterUpdate() of Combo_Exit() maar die Events kan ik niet selecteren.
Ik kom niet verder dan dit.
Onderstaande code werkt alleen bij gebruik van de Enter- of Tabtoets.

Private Sub Combo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
  Select Case Mid(Combo.Name, 9)

      Case 1
             With Sheets("inhoud keuzelijsten").ListObjects("plaats")
                If Not IsNumeric(Application.Match(Combo.Text, .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Combo.Text
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
            End With
      Case 2, 3, 7, 8, 11
               'Code
     
      Case 4, 5, 6, 9, 10, 12
               'Code
  End Select
End If
End Sub

En anders maar even wachten op VeerJ, die zal zeker met een betere oplossing komen.
Groet,

Albert

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #53 Gepost op: 08 augustus 2021, 13:11:33 »
Toch nog een aanpassing, anders kun je aardig wat lege regels in de tabellen krijgen.
Private Sub Combo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
  Select Case Mid(Combo.Name, 9)

      Case 1
            If Len(Combo.Text) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("plaats")
                If Not IsNumeric(Application.Match(Combo.Text, .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Combo.Text
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
           
      Case 2, 3, 7, 8, 11
            If Len(Combo.Text) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("naam")
                If Not IsNumeric(Application.Match(Combo.Text, .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Combo.Text
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
           
      Case 4, 5, 6, 9, 10, 12
            If Len(Combo.Text) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("voornaam")
                If Not IsNumeric(Application.Match(Combo.Text, .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Combo.Text
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
  End Select
End If
End Sub
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #54 Gepost op: 08 augustus 2021, 14:00:34 »
@Albert,

Hartelijk dank voor jouw mogelijke oplossing.
De betreffende code moet echter geïmplementeerd worden achter de macro van de opdrachtknop, in onderstaande code dus :

Private Sub CommandButton1_Click()
If TextBox1 = "g" Then
    With Sheets("IDX-geb")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 11) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text)
        .Columns("A:K").EntireColumn.AutoFit
    End With
    'hier code voor eventuele aanvulling keuzelijsten voor gebruikte comboboxen bij 'geboorte'
End If

If TextBox1 = "h" Then
    With Sheets("IDX-huw")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 16) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text, ComboBox8.Text, ComboBox9.Text, ComboBox10.Text, ComboBox11.Text, ComboBox12.Text)
        ii = i + 1
            If TextBox2 = "m" Then TextBox2 = "v"
            .Range("A" & ii).Resize(, 16) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox8.Text, ComboBox8.Text, _
            ComboBox9.Text, ComboBox10.Text, ComboBox11.Text, ComboBox12.Text, ComboBox2.Text, ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text)
        .Columns("A:P").EntireColumn.AutoFit
    End With
    'hier code voor eventuele aanvulling keuzelijsten voor gebruikte comboboxen bij 'huwelijk'
End If

If TextBox1 = "o" Then
    With Sheets("IDX-ovl")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 14) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text, ComboBox8.Text, ComboBox9.Text, TextBox18)
        .Columns("A:N").EntireColumn.AutoFit
    End With
    'hier code voor eventuele aanvulling keuzelijsten voor gebruikte comboboxen bij 'overlijden'
End If

'leegmaken van alle text- en comboboxen
For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
        ctrl.Value = ""
    End If
    If TypeName(ctrl) = "ComboBox" Then
        ctrl.ListIndex = -1
    End If
Next ctrl


End Sub

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #55 Gepost op: 08 augustus 2021, 14:46:06 »
Had ik al geprobeerd , maar vooralsnog te weinig kennis van VBA . :(
Dan maar even wachten op de expert VeerJ. Ben zelf ook reuze benieuwd.
Groet,

Albert

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #56 Gepost op: 08 augustus 2021, 15:26:53 »
Probeer dit eens.
Niet zo fraai, maar volgens mij werkt het wel. ;D
Gebruik maken van de Klassemodule lukt me niet.
Private Sub CommandButton1_Click()
If TextBox1 = "g" Then
    With Sheets("IDX-geb")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 11) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text)
        .Columns("A:K").EntireColumn.AutoFit
    End With
End If

If TextBox1 = "h" Then
    With Sheets("IDX-huw")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 16) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text, ComboBox8.Text, ComboBox9.Text, ComboBox10.Text, ComboBox11.Text, ComboBox12.Text)
        ii = i + 1
            If TextBox2 = "m" Then TextBox2 = "v"
            .Range("A" & ii).Resize(, 16) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox8.Text, ComboBox8.Text, _
            ComboBox9.Text, ComboBox10.Text, ComboBox11.Text, ComboBox12.Text, ComboBox2.Text, ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text)
        .Columns("A:P").EntireColumn.AutoFit
    End With
End If

If TextBox1 = "o" Then
    With Sheets("IDX-ovl")
        i = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
            .Range("A" & i).Resize(, 14) = Array(TextBox2, CDbl(TextBox3), CDbl(TextBox4), CDbl(TextBox5), ComboBox1.Text, ComboBox2.Text, ComboBox3.Text, _
            ComboBox4.Text, ComboBox5.Text, ComboBox6.Text, ComboBox7.Text, ComboBox8.Text, ComboBox9.Text, TextBox18)
        .Columns("A:N").EntireColumn.AutoFit
    End With
End If

For i = 1 To 9
Select Case Right(Me("ComboBox" & i).Name, 1)

Case 1
        If Len(Me("ComboBox" & i)) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("plaats")
                If Not IsNumeric(Application.Match(Me("ComboBox" & i), .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Me("ComboBox" & i)
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
Case 2, 3, 7, 8
            If Len(Me("ComboBox" & i)) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("naam")
                If Not IsNumeric(Application.Match(Me("ComboBox" & i), .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Me("ComboBox" & i)
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
       
      Case 4, 5, 6, 9
            If Len(Me("ComboBox" & i)) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("voornaam")
                If Not IsNumeric(Application.Match(Me("ComboBox" & i), .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Me("ComboBox" & i)
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If
       
 End Select
Next


For i = 10 To 12
Select Case Right(Me("ComboBox" & i).Name, 2)


Case 11
            If Len(Me("ComboBox" & i)) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("naam")
                If Not IsNumeric(Application.Match(Me("ComboBox" & i), .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Me("ComboBox" & i)
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If

Case 10, 12
            If Len(Me("ComboBox" & i)) > 0 Then
             With Sheets("inhoud keuzelijsten").ListObjects("voornaam")
                If Not IsNumeric(Application.Match(Me("ComboBox" & i), .DataBodyRange, 0)) Then
                .ListRows.Add.Range = Me("ComboBox" & i)
                .Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
                End If
             End With
            End If

End Select

Next



'leegmaken van alle textboxen en comboboxen
For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Or TypeName(ctrl) = "ComboBox" Then
        ctrl.Value = ""
    End If
Next ctrl

TextBox1.SetFocus
End Sub
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #57 Gepost op: 08 augustus 2021, 16:18:38 »
@Albert,

Bedankt voor jouw voorbeelden  _/-\o_. Ik heb de laatste eventjes bestudeerd waardoor ik beter inzicht kreeg in structuur en formulering en heb het dan lichtjes gewijzigd om het duidelijker en overzichtelijker te krijgen (voor geb worden nl enkel de eerste 7 comboboxen gebruikt, voor huw alle 12 de comboboxen en voor ovl enkel de eerste 9 comboboxen).

Ik kan echter, spijtig genoeg, zoals in één van mijn eerdere berichten reeds vermeld, geen van de mogelijkheden uittesten aangezien ik de comboboxen niet kan gebruiken in het UserForm.
Vermoedelijk ergens een verkeerde instelling of een lijntje code dat ontbreekt bij de programmacode voor de UserForm, geen idee eigenlijk, kennis te beperkt, maar zolang ik de comboboxen niet kan gebruiken kan ik ook niets testen...


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline AD1957

  • Ervaren lid
  • ***
  • Berichten: 250
  • Oplossing.be
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #58 Gepost op: 08 augustus 2021, 16:33:59 »
Plaats eens het bestand, ik vermoed dat er in de eigenschappen van de comboboxen iets niet goed  staat.
Controleer dit eens in de eigenschappen:   
MAthEntry=   Complete
   Style=   DropdownCombo

p.s. wijzigingen in eerdere reacties worden vaak niet meer gezien.
Groet,

Albert

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: niet aansluitende cellen leegmaken via VBA
« Reactie #59 Gepost op: 08 augustus 2021, 16:56:26 »
@Albert,

Bedankt voor je snelle antwoord, het was de 'style' die verkeerd stond ingesteld. De 'MatchEntry' moet sowieso op 'none' staan.
Nu kan ik ze wel gebruiken  :thumbsup:.

PS: Ik zal er aan denken om voortaan mijn "update's" en/of "edit's" in een nieuw bericht te plaatsen als er ondertussen reeds nieuwe reacties geplaatst zijn  ;).

Ik ga de aanpassing van de 'style' van de comboboxen op de rest van de comboxen toepassen en dan zal ik de toegevoegde code achter de opdrachtknop eens grondig uittesten. Ik laat het resultaat hier nog wel weten.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com