Avatar billede way3000 Nybegynder
05. april 2006 - 17:24 Der er 20 kommentarer og
1 løsning

VBA i excel

Hej. jeg forsøger at sidde og programmere et lille vba stykke der skal åbne en form som så skal udfyldes af brugeren og derefter føre informationen der er indtastet ind på den næste tomme plads.

men det er da ikke helt nemt..

http://WaY.users.whitehat.dk/images/pic1.JPG

http://WaY.users.whitehat.dk/images/pic2.JPG

håber i kan se hvad jeg mener.. men bare så i ved det.. hvis en enkelt rubrik ikke er udfyldt på linien ovenover må den altså ikke knalde den op i den ovenover så det ikke giver nogen mening.

Håber i kan følge mig og at nogen der kan der det med kode kan hjælpe mig.

pfh. tak.
Avatar billede supertekst Ekspert
05. april 2006 - 18:22 #1
Jeg vender tilbage senere - skulle ikke være det store problem.
Avatar billede way3000 Nybegynder
05. april 2006 - 18:25 #2
lyder genialt.. tusind takker :)
Avatar billede supertekst Ekspert
05. april 2006 - 19:28 #3
Denne kode indlægges i Userformen - heri er der kun taget højde for de 6 checkbokse:

Dim idag As Date, førsteLedigeRække As Integer
Private Sub f_indsætIskema_Click()
    idag = Date
   
    ActiveWorkbook.Sheets(1).Activate
    Cells(1, 1).Select
    førsteLedigeRække = findFørsteLedigeRække
    Cells(førsteLedigeRække, 1) = Format(idag, "dd-mmmm-yyyy")
   
    testCheckBokse
End Sub
Private Sub testCheckBokse()
Dim cb, con As Control
    For cb = 1 To 6
        Set con = Me.Controls("checkbox" + CStr(cb))
        If con.Value = True Then
            Cells(førsteLedigeRække, cb + 7) = "X"  'begynd med kolonne H
        End If
    Next cb
End Sub
Private Function findFørsteLedigeRække()
Dim r
    Cells(1, 1).Select
    r = 1
    While erRækkeledig(r) = False
        r = r + 1
    Wend
   
    findFørsteLedigeRække = r
End Function
Private Function erRækkeledig(ræk)
Dim kolonne, ok As Boolean
    ok = True
    For kolonne = 1 To 13
        If Cells(ræk, kolonne) <> "" Then
            erRækkeledig = False
            Exit Function
        End If
    Next kolonne
   
    erRækkeledig = True
End Function

Håber du kan anvende dette.

Mvh
Avatar billede way3000 Nybegynder
06. april 2006 - 08:21 #4
Jeg må nok indrømme jeg forstår ikke hele koden, nu siger du den kun tager højde for checkboksene.
dvs at hvis jeg udfylder noget i de tomme felter til tekst så bliver det ikke indsat ?
Avatar billede supertekst Ekspert
06. april 2006 - 08:40 #5
Korrekt.
I den userform, som jeg har dannet for at teste - har jeg kun de 6 cb'er afsat.

Du kan i Sub testCheckBokse - se at her testes boksene på skift og er de sat indsættes de i rækken - kolonnen cb'ens nr + 7 - idet - X indsættes fra kolonne 8 (H).

Dine øvrige bokse kan overføres således:

Private Sub f_indsætIskema_Click()
    idag = Date
   
    ActiveWorkbook.Sheets(1).Activate
    Cells(1, 1).Select
    førsteLedigeRække = findFørsteLedigeRække
    Cells(førsteLedigeRække, 1) = Format(idag, "dd-mmmm-yyyy")
   
rem Her indsættes tekstfelter fra userformen i de enkelte kolonner
    cells(førsteLedigeRække,2) = me.Textbox4    'Produkt har f.eks. dette boxnavnet
    . . . . .
    . . . . .
    cells(førsteLedigeRække,6) = me.Textbox1    'RMA-nummer -> kolonne 6
rem o.s.v.

    testCheckBokse    'Her indsættescheckbokse
End Sub
Avatar billede way3000 Nybegynder
06. april 2006 - 08:51 #6
Ahh tusind tak, jeg forsøger at se om jeg får det hele til at virke.. klokker jeg for meget i det skriver jeg nok her igen :)

jeg siger tusind tak
Avatar billede way3000 Nybegynder
06. april 2006 - 10:23 #7
Private Sub CommandButton1_Click()
Unload Me
Worksheets("ark1").Activate
End Sub

>>>>>>Private Sub UserForm_Click()<<<<<<<<
Dim idag As Date, førsteLedigeRække As Integer
Private Sub f_indsætIskema_Click()
    idag = Date
   
    ActiveWorkbook.Sheets(1).Activate
    Cells(1, 1).Select
    førsteLedigeRække = findFørsteLedigeRække
    Cells(førsteLedigeRække, 1) = Format(idag, "dd-mmmm-yyyy")
   
    Cells(førsteLedigeRække, 6) = Me.txtrma    'rma nr. har dette boxnavn
    Cells(førsteLedigeRække, 4) = Me.txtsn      's/n har dette boxnavn
    Cells(førsteLedigeRække, 3) = Me.txtprodu  'Producent har dette boxnavn
    Cells(førsteLedigeRække, 2) = Me.txtprodukt 'Produkt har dette boxnavn
    Cells(førsteLedigeRække, 5) = Me.txtdealer  'Forhandler har dette boxnavn
    Cells(førsteLedigeRække, 15) = Me.txterror  'fejl har dette boxnavn
   
    testCheckBokse
End Sub
Private Sub testCheckBokse()
Dim cb, con As Control
    For cb = 1 To 6
        Set con = Me.Controls("checkbox" + CStr(cb))
        If con.Value = True Then
            Cells(førsteLedigeRække, cb + 7) = "X"  'begynd med kolonne H
        End If
    Next cb
End Sub
Private Function findFørsteLedigeRække()
Dim r
    Cells(1, 1).Select
    r = 1
    While erRækkeledig(r) = False
        r = r + 1
    Wend
   
    findFørsteLedigeRække = r
End Function
Private Function erRækkeledig(ræk)
Dim kolonne, ok As Boolean
    ok = True
    For kolonne = 1 To 13
        If Cells(ræk, kolonne) <> "" Then
            erRækkeledig = False
            Exit Function
        End If
    Next kolonne
   
    erRækkeledig = True
End Function




>>>>Private Sub UserForm_Click()<<<<<
Den siger expected end sub .. men den har jo end sub ? er det mig der har lavet lort i koden ?
Avatar billede way3000 Nybegynder
06. april 2006 - 10:37 #8
det var åbenbart kun den ene gang..

men en anden ting er.. når jeg kører dether så sætter den intet ind i excel.. can you tell me why ?
Avatar billede way3000 Nybegynder
06. april 2006 - 10:42 #9
ahh det er når jeg klikker på userform men ikke når jeg klikker på den knap jeg har lavet.

så fejlmelder den med: compile error expected end sub  og den markerer denne gang
"Private Sub UserForm_Click()
Dim"
Avatar billede supertekst Ekspert
06. april 2006 - 11:08 #10
Prøv at ændre følgende:

Du skal sætte REM foran >>>>>>Private Sub UserForm_Click()<<<<<<<<

Dim idag As Date, førsteLedigeRække As Integer  SKAL STÅ ALLER ØVERST i koden - så definitioner er globale - kan anvendes i alle sub & function

Men ellers selv tak - giv blot signal igen, hvis flere problemer
MVH
Avatar billede way3000 Nybegynder
06. april 2006 - 14:15 #11
Dim idag As Date, førsteLedigeRække As Integer
Rem Private Sub UserForm_Click()
Private Sub f_indsætIskema_Click()
    idag = Date
       
    ActiveWorkbook.Sheets(1).Activate
    Cells(1, 1).Select
    førsteLedigeRække = findFørsteLedigeRække
    Cells(førsteLedigeRække, 1) = Format(idag, "dd-mmmm-yyyy")
   
    Cells(førsteLedigeRække, 6) = Me.txtrma    'rma nr. har dette boxnavn
    Cells(førsteLedigeRække, 4) = Me.txtsn      's/n har dette boxnavn
    Cells(førsteLedigeRække, 3) = Me.txtprodu  'Producent har dette boxnavn
    Cells(førsteLedigeRække, 2) = Me.txtprodukt 'Produkt har dette boxnavn
    Cells(førsteLedigeRække, 5) = Me.txtdealer  'Forhandler har dette boxnavn
    Cells(førsteLedigeRække, 15) = Me.txterror  'fejl har dette boxnavn
   
    testCheckBokse
End Sub
Private Sub testCheckBokse()
Dim cb, con As Control
    For cb = 1 To 6
        Set con = Me.Controls("checkbox" + CStr(cb))
        If con.Value = True Then
            Cells(førsteLedigeRække, cb + 7) = "X"  'begynd med kolonne H
        End If
    Next cb
End Sub
Private Function findFørsteLedigeRække()
Dim r
    Cells(1, 1).Select
    r = 1
    While erRækkeledig(r) = False
        r = r + 1
    Wend
   
    findFørsteLedigeRække = r
End Function
Private Function erRækkeledig(ræk)
Dim kolonne, ok As Boolean
    ok = True
    For kolonne = 1 To 13
        If Cells(ræk, kolonne) <> "" Then
            erRækkeledig = False
            Exit Function
        End If
    Next kolonne
   
    erRækkeledig = True
End Function
End Sub




denne gang vil den bare slet ingen ting... hvis jeg sætter rem forand den code der siger at når jeg trykker på userformen så skal den køre koden så bliver den grøn og intet virker ?
Avatar billede supertekst Ekspert
06. april 2006 - 14:34 #12
Prøv at slette den SUB, der står til sidst og vend tilbage
Avatar billede way3000 Nybegynder
06. april 2006 - 14:40 #13
så sker der ingenting
Avatar billede supertekst Ekspert
06. april 2006 - 14:46 #14
OK - jeg snupper din kode herfra og tester den - vender så hurtigt tilbage - håber
jeg.
Avatar billede way3000 Nybegynder
06. april 2006 - 14:47 #15
ok tusind tak :D
Avatar billede supertekst Ekspert
06. april 2006 - 15:01 #16
Har testet din kode og den er OK - men hvordan starter du op?

Prøv at indlægge dette i ThisWorkbook i VBA:

Sub workbook_activate()
    Load UserForm1
    UserForm1.Show
End Sub

Det medfører, at når mappen åbnes - så kaldes og vises formularen!
Avatar billede way3000 Nybegynder
06. april 2006 - 15:48 #17
jeg er vist mere noob end jeg troede..

thiswookbook ?

jeg kan ikke den til at gøre noget, hvor trykker du for at den skal smide tingene ind ? tror jeg smider et link til min fil .. så må du se om du kan se fejlen.

http://way.users.whitehat.dk/help/Fejlmeldinger.xls

tusind tak for hjælpen so far
Avatar billede supertekst Ekspert
06. april 2006 - 16:46 #18
Har downloaded fil -ser på den.

Send din mail til pb@supertekst-it.dk - så sender jeg den retur - når jeg har set nærmere på den. Måske bliver det først i morgen.
Avatar billede supertekst Ekspert
06. april 2006 - 16:55 #19
Hurtig ekspedition:

Problemet er ganske enkelt:
- Din kommandoknap hedder CommandButton1 - men i programmet er følgende anført

Private Sub f_indsætIskema_Click() - det er det navn jeg har anvendt - så enten retter du i programmet til:

Private Sub CommandButton1_Click() - eller knappens navn rettes til f_indsætISkema
Avatar billede way3000 Nybegynder
06. april 2006 - 18:52 #20
ahh.. tja det lyder da meget logisk.

typisk mig at lave den slags dummefejl ..

Men jeg siger helt vildt mange tak for hjælpen :D
Avatar billede supertekst Ekspert
07. april 2006 - 08:32 #21
Selv tak - man lærer jo hele tiden......
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