Avatar billede steensommer Praktikant
20. december 2005 - 19:10 Der er 18 kommentarer og
2 løsninger

Forkortelse af programmering

Hej

Jeg har en Userform hvor jeg skal resette følgende textboxe:

    FrmHovedkort.TxtP1.Text = rs("P1").Value
    FrmHovedkort.TxtP2.Text = rs("P2").Value
    FrmHovedkort.TxtP3.Text = rs("P3").Value
    FrmHovedkort.TxtP4.Text = rs("P4").Value
    FrmHovedkort.TxtP5.Text = rs("P5").Value
    FrmHovedkort.TxtP6.Text = rs("P6").Value
    FrmHovedkort.TxtP7.Text = rs("P7").Value
    FrmHovedkort.TxtP8.Text = rs("P8").Value
    FrmHovedkort.TxtP9.Text = rs("P9").Value
    FrmHovedkort.TxtP10.Text = rs("P10").Value
    FrmHovedkort.TxtP11.Text = rs("P11").Value
    FrmHovedkort.TxtP12.Text = rs("P12").Value
    FrmHovedkort.TxtP13.Text = rs("P13").Value
    FrmHovedkort.TxtP14.Text = rs("P14").Value
    FrmHovedkort.TxtP15.Text = rs("P15").Value
    FrmHovedkort.TxtP16.Text = rs("P16").Value
    FrmHovedkort.TxtP17.Text = rs("P17").Value

    FrmHovedkort.TxtD0P1.Text = rs("D0P1").Value
    FrmHovedkort.TxtD0P2.Text = rs("D0P2").Value
    FrmHovedkort.TxtD0P3.Text = rs("D0P3").Value
    FrmHovedkort.TxtD0P4.Text = rs("D0P4").Value
    FrmHovedkort.TxtD0P5.Text = rs("D0P5").Value
    FrmHovedkort.TxtD0P6.Text = rs("D0P6").Value
    FrmHovedkort.TxtD0P7.Text = rs("D0P7").Value
    FrmHovedkort.TxtD0P8.Text = rs("D0P8").Value
    FrmHovedkort.TxtD0P9.Text = rs("D0P9").Value
    FrmHovedkort.TxtD0P10.Text = rs("D0P10").Value
    FrmHovedkort.TxtD0P11.Text = rs("D0P11").Value
    FrmHovedkort.TxtD0P12.Text = rs("D0P12").Value
    FrmHovedkort.TxtD0P13.Text = rs("D0P13").Value
    FrmHovedkort.TxtD0P14.Text = rs("D0P14").Value
    FrmHovedkort.TxtD0P15.Text = rs("D0P15").Value
    FrmHovedkort.TxtD0P16.Text = rs("D0P16").Value
    FrmHovedkort.TxtD0P17.Text = rs("D0P17").Value
   
    FrmHovedkort.TxtD1P1.Text = rs("D1P1").Value
    FrmHovedkort.TxtD1P2.Text = rs("D1P2").Value
    FrmHovedkort.TxtD1P3.Text = rs("D1P3").Value
    FrmHovedkort.TxtD1P4.Text = rs("D1P4").Value
    FrmHovedkort.TxtD1P5.Text = rs("D1P5").Value
    FrmHovedkort.TxtD1P6.Text = rs("D1P6").Value
    FrmHovedkort.TxtD1P7.Text = rs("D1P7").Value
    FrmHovedkort.TxtD1P8.Text = rs("D1P8").Value
    FrmHovedkort.TxtD1P9.Text = rs("D1P9").Value
    FrmHovedkort.TxtD1P10.Text = rs("D1P10").Value
    FrmHovedkort.TxtD1P11.Text = rs("D1P11").Value
    FrmHovedkort.TxtD1P12.Text = rs("D1P12").Value
    FrmHovedkort.TxtD1P13.Text = rs("D1P13").Value
    FrmHovedkort.TxtD1P14.Text = rs("D1P14").Value
    FrmHovedkort.TxtD1P15.Text = rs("D1P15").Value
    FrmHovedkort.TxtD1P16.Text = rs("D1P16").Value
    FrmHovedkort.TxtD1P17.Text = rs("D1P17").Value

Ovenstående burde vel kunne forkortes med nogle (for X = 1 to etc) men jeg kan ikke få det til at makke ret. Er der en der kan?

vh Steen
Avatar billede brynil Nybegynder
20. december 2005 - 20:49 #1
Kan du ikke forsøge at lege videre med dette:

Dim x As Integer
Dim ctl As MSForms.Control

For Each ctl In UserForm1.Controls
    If ctl.Tag = "tb" Then
        ctl.Text = x
        x = x + 1
    End If
Next ctl

Sæt tag-værdien i dine tekstbokse til tb.

Ellers vent for det ser ud til at Exp. ikke er helt oppe på dupperne lige pt. Får ihverfald ingen mails og kan ikke søge.

Du kan senere prøve at søge på control-arrays, jeg mener spm. er blevet vendt flere gange før.
Avatar billede bak Forsker
20. december 2005 - 22:48 #2
eller

Private Sub CommandButton1_Click()
Dim oTxt As Object
Dim x As String
For Each oTxt In Me.Controls
  If TypeName(oTxt) = "TextBox" Then
    x = Mid(oTxt.Name, 3, 99)
    oTxt.Value = rs(x).Value
  End If
Next
End Sub
Avatar billede bak Forsker
20. december 2005 - 23:13 #3
sorry
x = Mid(oTxt.Name, 4, 99)
Avatar billede steensommer Praktikant
21. december 2005 - 00:45 #4
jo men jeg ønsker ikke alle userformens textboxe slettet - kun de nævnte!
Avatar billede bak Forsker
21. december 2005 - 01:30 #5
jajaja nu ik' så hurtig, Steen :-)

Private Sub CommandButton1_Click()
Dim oTxt As Object
Dim x As String
Dim MyArray
Dim MyItem
MyArray = Array("P", "D0P", "D1P")
For Each oTxt In Me.Controls
  If TypeName(oTxt) = "TextBox" Then
    x = Mid(oTxt.Name, 4, 99)
    For Each MyItem In MyArray
      If (x Like MyItem & "[0-9]") Or x Like MyItem & "[1][1-7]" Then
        oTxt.Value = rs(x)
      End If
    Next
  End If
Next
End Sub
Avatar billede bak Forsker
21. december 2005 - 01:33 #6
If (x Like MyItem & "[0-9]") Or (x Like MyItem & "[1][0-7]") Then
Avatar billede steensommer Praktikant
21. december 2005 - 08:37 #7
Hej bak
Tak for dit bidrag. Programmeringen er jo som sædvanlig for de "langhårede" ;0)
så har du mulighed for at ændre hele følgende variant?

vh Steen

    FrmHovedkort.TxtP1.Text = rs("P1").Value
    FrmHovedkort.TxtP2.Text = rs("P2").Value
    FrmHovedkort.TxtP3.Text = rs("P3").Value
    FrmHovedkort.TxtP4.Text = rs("P4").Value
    FrmHovedkort.TxtP5.Text = rs("P5").Value
    FrmHovedkort.TxtP6.Text = rs("P6").Value
    FrmHovedkort.TxtP7.Text = rs("P7").Value
    FrmHovedkort.TxtP8.Text = rs("P8").Value
    FrmHovedkort.TxtP9.Text = rs("P9").Value
    FrmHovedkort.TxtP10.Text = rs("P10").Value
    FrmHovedkort.TxtP11.Text = rs("P11").Value
    FrmHovedkort.TxtP12.Text = rs("P12").Value
    FrmHovedkort.TxtP13.Text = rs("P13").Value
    FrmHovedkort.TxtP14.Text = rs("P14").Value
    FrmHovedkort.TxtP15.Text = rs("P15").Value
    FrmHovedkort.TxtP16.Text = rs("P16").Value
    FrmHovedkort.TxtP17.Text = rs("P17").Value

    FrmHovedkort.TxtD0P1.Text = rs("D0P1").Value
    FrmHovedkort.TxtD0P2.Text = rs("D0P2").Value
    FrmHovedkort.TxtD0P3.Text = rs("D0P3").Value
    FrmHovedkort.TxtD0P4.Text = rs("D0P4").Value
    FrmHovedkort.TxtD0P5.Text = rs("D0P5").Value
    FrmHovedkort.TxtD0P6.Text = rs("D0P6").Value
    FrmHovedkort.TxtD0P7.Text = rs("D0P7").Value
    FrmHovedkort.TxtD0P8.Text = rs("D0P8").Value
    FrmHovedkort.TxtD0P9.Text = rs("D0P9").Value
    FrmHovedkort.TxtD0P10.Text = rs("D0P10").Value
    FrmHovedkort.TxtD0P11.Text = rs("D0P11").Value
    FrmHovedkort.TxtD0P12.Text = rs("D0P12").Value
    FrmHovedkort.TxtD0P13.Text = rs("D0P13").Value
    FrmHovedkort.TxtD0P14.Text = rs("D0P14").Value
    FrmHovedkort.TxtD0P15.Text = rs("D0P15").Value
    FrmHovedkort.TxtD0P16.Text = rs("D0P16").Value
    FrmHovedkort.TxtD0P17.Text = rs("D0P17").Value
   
    FrmHovedkort.TxtD1P1.Text = rs("D1P1").Value
    FrmHovedkort.TxtD1P2.Text = rs("D1P2").Value
    FrmHovedkort.TxtD1P3.Text = rs("D1P3").Value
    FrmHovedkort.TxtD1P4.Text = rs("D1P4").Value
    FrmHovedkort.TxtD1P5.Text = rs("D1P5").Value
    FrmHovedkort.TxtD1P6.Text = rs("D1P6").Value
    FrmHovedkort.TxtD1P7.Text = rs("D1P7").Value
    FrmHovedkort.TxtD1P8.Text = rs("D1P8").Value
    FrmHovedkort.TxtD1P9.Text = rs("D1P9").Value
    FrmHovedkort.TxtD1P10.Text = rs("D1P10").Value
    FrmHovedkort.TxtD1P11.Text = rs("D1P11").Value
    FrmHovedkort.TxtD1P12.Text = rs("D1P12").Value
    FrmHovedkort.TxtD1P13.Text = rs("D1P13").Value
    FrmHovedkort.TxtD1P14.Text = rs("D1P14").Value
    FrmHovedkort.TxtD1P15.Text = rs("D1P15").Value
    FrmHovedkort.TxtD1P16.Text = rs("D1P16").Value
    FrmHovedkort.TxtD1P17.Text = rs("D1P17").Value
   
    FrmHovedkort.TxtD2P1.Text = rs("D2P1").Value
    FrmHovedkort.TxtD2P2.Text = rs("D2P2").Value
    FrmHovedkort.TxtD2P3.Text = rs("D2P3").Value
    FrmHovedkort.TxtD2P4.Text = rs("D2P4").Value
    FrmHovedkort.TxtD2P5.Text = rs("D2P5").Value
    FrmHovedkort.TxtD2P6.Text = rs("D2P6").Value
    FrmHovedkort.TxtD2P7.Text = rs("D2P7").Value
    FrmHovedkort.TxtD2P8.Text = rs("D2P8").Value
    FrmHovedkort.TxtD2P9.Text = rs("D2P9").Value
    FrmHovedkort.TxtD2P10.Text = rs("D2P10").Value
    FrmHovedkort.TxtD2P11.Text = rs("D2P11").Value
    FrmHovedkort.TxtD2P12.Text = rs("D2P12").Value
    FrmHovedkort.TxtD2P13.Text = rs("D2P13").Value
    FrmHovedkort.TxtD2P14.Text = rs("D2P14").Value
    FrmHovedkort.TxtD2P15.Text = rs("D2P15").Value
    FrmHovedkort.TxtD2P16.Text = rs("D2P16").Value
    FrmHovedkort.TxtD2P17.Text = rs("D2P17").Value
   
    FrmHovedkort.TxtD3P1.Text = rs("D3P1").Value
    FrmHovedkort.TxtD3P2.Text = rs("D3P2").Value
    FrmHovedkort.TxtD3P3.Text = rs("D3P3").Value
    FrmHovedkort.TxtD3P4.Text = rs("D3P4").Value
    FrmHovedkort.TxtD3P5.Text = rs("D3P5").Value
    FrmHovedkort.TxtD3P6.Text = rs("D3P6").Value
    FrmHovedkort.TxtD3P7.Text = rs("D3P7").Value
    FrmHovedkort.TxtD3P8.Text = rs("D3P8").Value
    FrmHovedkort.TxtD3P9.Text = rs("D3P9").Value
    FrmHovedkort.TxtD3P10.Text = rs("D3P10").Value
    FrmHovedkort.TxtD3P11.Text = rs("D3P11").Value
    FrmHovedkort.TxtD3P12.Text = rs("D3P12").Value
    FrmHovedkort.TxtD3P13.Text = rs("D3P13").Value
    FrmHovedkort.TxtD3P14.Text = rs("D3P14").Value
    FrmHovedkort.TxtD3P15.Text = rs("D3P15").Value
    FrmHovedkort.TxtD3P16.Text = rs("D3P16").Value
    FrmHovedkort.TxtD3P17.Text = rs("D3P17").Value
   
    FrmHovedkort.TxtD4P1.Text = rs("D4P1").Value
    FrmHovedkort.TxtD4P2.Text = rs("D4P2").Value
    FrmHovedkort.TxtD4P3.Text = rs("D4P3").Value
    FrmHovedkort.TxtD4P4.Text = rs("D4P4").Value
    FrmHovedkort.TxtD4P5.Text = rs("D4P5").Value
    FrmHovedkort.TxtD4P6.Text = rs("D4P6").Value
    FrmHovedkort.TxtD4P7.Text = rs("D4P7").Value
    FrmHovedkort.TxtD4P8.Text = rs("D4P8").Value
    FrmHovedkort.TxtD4P9.Text = rs("D4P9").Value
    FrmHovedkort.TxtD4P10.Text = rs("D4P10").Value
    FrmHovedkort.TxtD4P11.Text = rs("D4P11").Value
    FrmHovedkort.TxtD4P12.Text = rs("D4P12").Value
    FrmHovedkort.TxtD4P13.Text = rs("D4P13").Value
    FrmHovedkort.TxtD4P14.Text = rs("D4P14").Value
    FrmHovedkort.TxtD4P15.Text = rs("D4P15").Value
    FrmHovedkort.TxtD4P16.Text = rs("D4P16").Value
    FrmHovedkort.TxtD4P17.Text = rs("D4P17").Value
   
    FrmHovedkort.TxtD5P1.Text = rs("D5P1").Value
    FrmHovedkort.TxtD5P2.Text = rs("D5P2").Value
    FrmHovedkort.TxtD5P3.Text = rs("D5P3").Value
    FrmHovedkort.TxtD5P4.Text = rs("D5P4").Value
    FrmHovedkort.TxtD5P5.Text = rs("D5P5").Value
    FrmHovedkort.TxtD5P6.Text = rs("D5P6").Value
    FrmHovedkort.TxtD5P7.Text = rs("D5P7").Value
    FrmHovedkort.TxtD5P8.Text = rs("D5P8").Value
    FrmHovedkort.TxtD5P9.Text = rs("D5P9").Value
    FrmHovedkort.TxtD5P10.Text = rs("D5P10").Value
    FrmHovedkort.TxtD5P11.Text = rs("D5P11").Value
    FrmHovedkort.TxtD5P12.Text = rs("D5P12").Value
    FrmHovedkort.TxtD5P13.Text = rs("D5P13").Value
    FrmHovedkort.TxtD5P14.Text = rs("D5P14").Value
    FrmHovedkort.TxtD5P15.Text = rs("D5P15").Value
    FrmHovedkort.TxtD5P16.Text = rs("D5P16").Value
    FrmHovedkort.TxtD5P17.Text = rs("D5P17").Value
   
    FrmHovedkort.TxtD6P1.Text = rs("D6P1").Value
    FrmHovedkort.TxtD6P2.Text = rs("D6P2").Value
    FrmHovedkort.TxtD6P3.Text = rs("D6P3").Value
    FrmHovedkort.TxtD6P4.Text = rs("D6P4").Value
    FrmHovedkort.TxtD6P5.Text = rs("D6P5").Value
    FrmHovedkort.TxtD6P6.Text = rs("D6P6").Value
    FrmHovedkort.TxtD6P7.Text = rs("D6P7").Value
    FrmHovedkort.TxtD6P8.Text = rs("D6P8").Value
    FrmHovedkort.TxtD6P9.Text = rs("D6P9").Value
    FrmHovedkort.TxtD6P10.Text = rs("D6P10").Value
    FrmHovedkort.TxtD6P11.Text = rs("D6P11").Value
    FrmHovedkort.TxtD6P12.Text = rs("D6P12").Value
    FrmHovedkort.TxtD6P13.Text = rs("D6P13").Value
    FrmHovedkort.TxtD6P14.Text = rs("D6P14").Value
    FrmHovedkort.TxtD6P15.Text = rs("D6P15").Value
    FrmHovedkort.TxtD6P16.Text = rs("D6P16").Value
    FrmHovedkort.TxtD6P17.Text = rs("D6P17").Value
Avatar billede bak Forsker
21. december 2005 - 09:01 #8
langhåret og langhåret....
ca 4 mm hvor der noget endnu :-)

Dim oTxt As Object
Dim stRight As String
Dim MyArray
Dim MyItem
MyArray = Array("P", "D0P", "D1P", "D2P", "D3P", "D4P", "D5P", "D6P")
For Each oTxt In Me.Controls
  If TypeName(oTxt) = "TextBox" Then
    stRight = Mid(oTxt.Name, 4, 99)
    For Each MyItem In MyArray
      If (stRight Like MyItem & "[0-9]") Or (stRight Like MyItem & "[1][0-7]") Then
        oTxt.Value = rs(stRight)
      End If
    Next
  End If
Next
Avatar billede bak Forsker
21. december 2005 - 09:05 #9
bemærk at en sådan kode ikke kører hurtigere end den du har, tværtimod da der jo er flere tjeck pr linie
Avatar billede steensommer Praktikant
21. december 2005 - 09:35 #10
Så der er INGEN reel fordel ved den type kode?
Avatar billede bak Forsker
21. december 2005 - 09:49 #11
Jo, den fylder mindre og kan være mere flexibel, men i det her tilfælde er vi for hvert element på formen nødt til at tjekke om det er en tekstbox vi har fat i. Dernæst om om navnet ligner et af de 8 strenge i array
ligeledes skal der tjekkes på om der er een eller to cifre i enden streng, endda helt specifikke cifre.
Alt det er jo ekstra fyld, som du ikke har med i din gamle kode ..
Avatar billede kabbak Professor
21. december 2005 - 11:04 #12
et forsøg fra mig, jeg kan ikke teste på db

Dim oTxt As String, I As Integer
For I = 1 To 17

  oTxt = "TxtP" & I
    FrmHovedkort.Controls(oTxt).Text = rs("P" & I).Value

  oTxt = "TxtD0P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D0P" & I).Value
 
  oTxt = "TxtD1P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D1P" & I).Value
     
  oTxt = "TxtD2P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D2P" & I).Value
     
  oTxt = "TxtD3P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D3P" & I).Value
   
  oTxt = "TxtD4P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D4P" & I).Value
     
  oTxt = "TxtD5P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D5P" & I).Value
       
  oTxt = "TxtD6P" & I
    FrmHovedkort.Controls(oTxt).Text = rs("D6P" & I).Value
       
Next
Avatar billede bak Forsker
21. december 2005 - 11:16 #13
Ja, det var da et godt alternativ kabbak
kan forkortes lidt men burde være ok. Jeg kan heller ike tjekke

Dim oTxt As String, I As Integer, J As Long
  For I = 1 To 17
      oTxt = "TxtP" & I
      FrmHovedkort.Controls(oTxt).Text = rs("P" & I).Value
      For J = 0 To 6
        oTxt = "TxtD" & J & "P" & I
        FrmHovedkort.Controls(oTxt).Text = rs("D" & J & "P" & I).Value
      Next
  Next
Avatar billede kabbak Professor
21. december 2005 - 11:18 #14
fint bak, jeg tror ikke den kan blive kortere ;-))
Avatar billede kabbak Professor
21. december 2005 - 11:21 #15
bak > J behøver da vist ikke at være af typen Long
Avatar billede steensommer Praktikant
21. december 2005 - 11:21 #16
Nej - det må siges at være nogle glimrende forslag. Jeg kan desværre ikke teste før jul men vender tilbage hurtigst muligt.
Jeg fordeler point mellem jer hvis det er OK. Så mangler i bare at svare og igen tak til jer begge - I er der altid når vi amatører har behov for eksperthjælp. Rigtig God Jul

vh Steen
Avatar billede bak Forsker
21. december 2005 - 11:35 #17
kabbak -> nej, det behøver den ikke. den kunne også være byte eller integer, men stort set alle programmer idag er 32 bit programmer (bla. excel). Dette bevirker at Long (som er 32 bit) er den størrelse, der passer bedst til programmerne og der vil ikke være noget sparet hverken i hukommelse eller hastighed ved at bruge mindre.
Hvis en lagerenhed er 32 sparer man jo intet ved kun at fylde den halvt. I det tilfælde kan der nemlig ikke være 2 halve i en hel .-)
Derfor bruger jeg altid typen Long
Avatar billede bak Forsker
21. december 2005 - 11:39 #18
steen -> det er helt i orden :-)
Avatar billede kabbak Professor
21. december 2005 - 11:53 #19
Tak for forklaringen bak, så blev jeg også klog på det.

Steen, jeg håber at det virker, så jeg smider også et svar.

Det sidste vi fandt frem til burde være det hurtigste, da vi ikke skal finde tekstboksen først, inden vi skriver i den, men kalder den ved dens navn.
Avatar billede steensommer Praktikant
25. december 2005 - 01:54 #20
Koden fungerer selvfølgelig perfekt - tak for hjælpen :0)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester