Helpmij.nl
Helpmij.nl
Helpmij.nl

Quote

Weergeven resultaten 1 tot 15 van 15

Onderwerp: verkorten van vba formules

  1. #1
    Vraag is niet opgelost

    verkorten van vba formules

    Goedemorgen,

    Ik hoop dat jullie me kunnen helpen met het volgende probleem.

    Ik heb een userform gemaakt in VBA, met ongeveer 120 invulvelden. De code ziet er als volgt uit:

    Sheets("Database").Range("Data_Start").Offset(TargetRow, 0).Value = Txt_Customer_Name.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 1).Value = Txt_Account_Class
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 2).Value = Txt_Business_Area.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 3).Value = Txt_End_User.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 4).Value = Txt_Region.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 5).Value = Txt_Country.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 6).Value = Txt_Location.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 7).Value = Txt_Contactperson.Text
    Sheets("Database").Range("Data_Start").Offset(TargetRow, 8).Value = Txt_Contact_Position.Text

    Nu verwacht ik dat deze codes ook makkelijker in een loop gebruikt kunnen worden. De cijfers voor de kolommen (dikgedrukt) lopen dus door tot ongeveer 120.

    Ik heb echter zelf geen idee hoe ik dit het beste kan doen aangezien ik alle tekstvakken een naam heb gegeven waardoor ze makkelijk te onderscheiden zijn in de programmacode. Heeft iemand een idee?

  2. #2
    Mega Senior JVeer's avatar
    Geregistreerd
    27 februari 2019
    Wie maakt er ook een userform van 120 invulvelden!
    Je kan zoiets doen, maar je moet alsnog alle 120 velden definiëren in je array.

    Code:
    Sheets("Database").Range("Data_Start").Offset(TargetRow).Resize(, 120) = Array(Txt_Customer_Name.Text, Txt_Account_Class, .........etc tot je 120e veld)
    Gr,
    JV

  3. #3
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Die 120 is inderdaad wel erg veel.
    Zet het kolomnummer waar de waarde van de TextBox in thuis hoort in de Textbox.Tag
    Vervolgens deze code:
    Code:
    For Each txt In Me.Controls
        If TypeName(txt) = "TextBox" Then
            If txt.Tag <> "" Then
                Sheets("Database").Range("Data_Start").Offset(TargetRow, Int(txt.Tag)).Value = txt.Text
            End If
        End If
    Next txt
    Laatst aangepast door edmoor : 14 januari 2021 om 09:09
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  4. #4
    Dag Jveer en Edmoor,

    bedankt voor jullie reacties.

    JVeer, ik neem aan dat je dan de velden in je array ook op de juiste volgorde moet zetten?

    Edmoor, die formule werkt bij mij niet. Wellicht doordat ik hem verkeerd gebruikt. Zoals ik het begrijp voeg ik in de eigenschappen van de textbox het veld "Tag" in met het juiste kolomnummer. Is dit juist? Zou je me kunnen uitleggen hoe jouw loop zou werken (m.a.w. wat doet de loop)?

  5. #5
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Het is geen formule maar VBA routine.
    Deze gaat alle objecten in de userform langs, kijkt of het een TextBox is, kijkt dan of de tag is gevuld en en gebruikt het nummer in de tag als kolomnummer.
    Zie voorbeeld documentje:
    pimcl.xlsm
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  6. #6
    Dat kom je tegen als je geen voorbeeldbestand plaatst, dan is het voor de helpers gokken en voor u natuurlijk ook.

  7. #7
    Mega Senior JVeer's avatar
    Geregistreerd
    27 februari 2019
    En ja dan moet je ze wel op de juiste volgorde zetten als je mijn suggestie gebruikt

  8. #8
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    1. geef de tekstvakken een naam met oplopend volgnummer 'T_0' t/m 'T_119'
    2. zet via een lus alle tekstvakwaarden in een array
    3. schrijf de array in 1 keer naar een werkblad (véél sneller dan 120 schrijfbewerkingen)

    Code:
    Sub M_snb
      redim sp(0,119)
    
      for j = 0 to 119
        sp(0,j)=Me("T_" & j).Text
      next
    
      Sheets("Database").cells(target.row,1).resize(,120)=sp
    End Sub
    Bij een goed doordacht Userform ontwerp zijn er nog meer mogelijkheden:
    - gebruik maken van de eigenschap .Tabindex ( 0 - 119) van de tekstvakken om ze in de juiste volgorde in de array te schrijven
    - gebruik maken van de eigenschap .Tag ( 0 - 119) van de tekstvakken om ze in de juiste volgorde in de array te schrijven

    Bijv.
    Code:
    Sub M_snb
      redim sp(0,119)
    
      for each it in controls
        if typename(it) = "TextBox" then sp(0,it.tabindex)=it.Text
    '    if typename(it) = "TextBox" then sp(0, it.Tag) = it. Text
      next
    
      Sheets("Database").cells(target.row,1).resize(,120)=sp
    End Sub
    Laatst aangepast door snb : 14 januari 2021 om 10:52
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  9. #9
    Edmoor, Hoe zou dat dan werken met keuzelijsten, selectievakjes en keuzerondjes?

    Zie bijgaand mijn voorbeeldbestand.
    Bijgevoegde bestanden Bijgevoegde bestanden

  10. #10
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Mag alleen ed nog maar helpen?
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

  11. #11
    @Snb bedankt voor je reactie. Dat ziet er zeer goed uit. Ik ga eens kijken of ik het werkend krijg

  12. #12
    @Snb ik krijg de foutmelding :"Kan het gegeven object niet vinden" in de regel sp(0, j) = Me("T_" & j).Text

  13. #13
    Wellicht is dit te hoog gegrepen om zelfstandig te doen. Ik ben namelijk geen kenner

  14. #14
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Heb je die textboxen wel de naam T_1, T_2, T_3 t/m T_120 gegeven?
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  15. #15
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    Zie voorbeeldbestand

    Het tweede voorbeeeldbestand bevat de mogelijkheid om te kiezen of in volgorde van naam, tabindex of tag moet worden geschreven in het werkblad.
    Bijgevoegde bestanden Bijgevoegde bestanden
    Laatst aangepast door snb : 14 januari 2021 om 11:03
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl

Regels
Help

Helpmij.nl en business

Partners
Sponsoren