Avatar billede richter1 Nybegynder
05. december 2007 - 20:31 Der er 16 kommentarer og
1 løsning

overflyt data fra en userform til en variabel i alm. vba kode

Hej experter
Jeg skal lige have udfyldt et hul i min viden. Jeg har en userform, hvor jeg via nogle textboxe får læst nogle værdier ind i nogle variabler. Disse variabler dør jo, når userformn lukkes. Hvordan gemmer jeg disse data, så jeg kan arbejde videre med dem?
Avatar billede word-hajen Nybegynder
05. december 2007 - 20:58 #1
Det kommer an på, hvad du ønsker at bruge dem til og hvornår. Hvis det er i en stadig strøm efter at du normalt lukker din userform, så kan du vente med at unloade formen og så blot skjule den, indtil du er klar.

Et andet alternativ er at placere dine variabler i et skjult ark, så du kan tilgå dem der via kode. Og så den 3. løsning, hvor du opretter document properties med variablerne, men så er de ikke skjult.
Avatar billede mpd Nybegynder
05. december 2007 - 21:11 #2
En let måde at få data fra txtBokse til at anvende senere er at lave et ark, hvor du gemmer aktuelle data fra formularen.

data gemmes ved at oprette en kode ved tekstboksen, hvor du ved ændring skriver output i en bestemt celle.

Eks:

Jeg har en formular med en comboboks. Jeg har en funktionsknap ved siden af. Når jeg aktiverer denne knap, startes procedure:

Aendre_FilID

Proceduren skriver indholdet af tekstboksen ved at bruge følgende kode:

    Dim FilNavn As String
   
   
   
    FilNavn = frmFilID.txtID.Value
    Sheets("Slut").Select
    FilText = Range("B2").Value

I dette ex. placeres værdien en ark ("Slut") i celle B2.
Avatar billede richter1 Nybegynder
05. december 2007 - 21:32 #3
Jeg har en userform, hvor brugeren vælger et navn i en liste i en combobox, valget udløser et telefonnummer i en textbox.
Disse to boxe skal jeg have med ud af userformen. vælger jeg skrive userform.hide, og laver en msgbox med variablerne, så kan jeg se at de har det korrekte indhold, men når userformen forlades, så mister de deres indhold. Hvad er årsagen til det?
Avatar billede richter1 Nybegynder
05. december 2007 - 21:42 #4
mod - din metode kan godt anvendes, men jeg vil helst undgå at skrive til arket. I første omgang vil jeg gerne undersøge muligheden med at bruge userforms.hide. Hvis ikke det virker, så vil jeg gerne vende tilbage til din metode.
Avatar billede word-hajen Nybegynder
05. december 2007 - 21:48 #5
Dine controller er en del af din userform, og derfor befinder både kontrollen og dens indhold sig kun der. Medmindre du sørger for at kalde din userform på en måde, så du stadig har "fat" i den, når du skjuler den.

I nedenstående eksempel har jeg i et modul placeret kode, der danner laver en reference til en ny dialogboks. Derefter vises dialogboksen, og når brugeren klikker ok, vender man retur til den kaldende procedure og har stadig fat i dialogboksens kontroller. Vær opmærksom på, at du ikke må bruge Unload me på din userform på OK-knappen (eller hvordan du nu "lukker" den), men skal bruge Me.Hide i stedet for.

Public Sub TestDialog()
    Dim objForm As UserForm1
   
    Set objForm = New UserForm1
   
    With objForm
        .Show
        Debug.Print objForm.cboName.Text
        Debug.Print objForm.txtPhone
    End With
   
    Set objForm = Nothing
End Sub
Avatar billede richter1 Nybegynder
05. december 2007 - 21:54 #6
burde navnet på din userform i DIM og i Set objform ikke være det samme?
Avatar billede richter1 Nybegynder
05. december 2007 - 21:58 #7
Hvis jeg har forstået det korrekt, så skal den kode, hvori jeg vil anvende variablerne fra userformen, anbringes mellem End With og Set objform = nothing. Er det rigtigt forstået?
Avatar billede word-hajen Nybegynder
06. december 2007 - 11:42 #8
Kommentar 05/12-2007 21:54:53 - de er ens (typen og navnet på userformen), men objektet som jeg bruger (objForm), kan jeg reelt kalde, hvad jeg har lyst til.

Du kan bruge variabler fra userformen mellem .Show og Set objForm = nothing.

Du kan f.eks. sende formen videre til andre procedurer, hvis du har behov for det, f.eks.

    Call InsertInfo(objForm)

hvor proceduren InsertInfo vil se således ud:

Public sub InsertInfo(objForm as UserForm1)
....kode her
End sub
Avatar billede richter1 Nybegynder
06. december 2007 - 14:56 #9
jeg har prøvet din kommentar 21:48:32. Her har jeg kan jeg afvikle den intil jeg i wit end with anbringer en objform.hide. her får jeg en debug fejl. Hvad er årsagen til det? jeg vil her skjule min userform for at arbejde videre med variablerne. Jeg er ikke sikker på, at jeg helt har forstået de to linier dim objform as userform1 og st objform = new userform1. Vil du knytte nogle kommentarer til dem, så vil jeg være glad.
Kan du give et eks. hvor userformen hedder noget andet end userform1?
Avatar billede richter1 Nybegynder
06. december 2007 - 16:09 #10
I din kommentar 11:42:29 kalder du en procedure fra din userform. I midt tilfælde afvikler jeg en procedure hvorfra jeg kalder en userform. Brugeren indtaster nogle oplysninger, som jeg skal have med tilbage til proceduren, hvorfra userformen er kald. Dvs. hvordan kommer jeg tilbage til proceduren, uden at indtastningerne fra userformen går tabt.
Avatar billede word-hajen Nybegynder
06. december 2007 - 23:20 #11
1. Du kan kalde din userform nøjagtig det, du har lyst til. Så udskift du bare userform1 med det, som din form hedder.

2. Du skal ikke skjule formen i proceduren, som jeg har vist, men f.eks. gøre det i en OK-knap PÅ din form.

3. Når du skjuler formen (på OK-knappen), kommer du automatisk tilbage til der, hvor du er startet med at vise formen - altså din kaldende procedure.
Avatar billede richter1 Nybegynder
07. december 2007 - 15:24 #12
Ud fra ovenstående burde rutinen virke - den gør det bare ikke. Userformen består af to comboboxe, der skal levere streng1 og streng 2. Hertil kommer en knap: gem. Jeg vil gerne have at et tryk på denne knap, får rutinen til at returnere til telefonrutinen. Hvad gør jeg galt?

Public Sub telefon()
Dim objform As fmsvagt

Set objform = New fmsvagt


streng = del_streng(Range("A2").Value)  ‘ her udtages en delstreng.

  objform.Show
 
streng1 = cmbnavn 
streng2 = txttlf                            ’ streng 1 og streng2  variabler fra userformen.

streng = streng + streng1 + streng2 + var + "  " + var1

[A2] = streng

Unload fmsvagt

End Sub
Avatar billede richter1 Nybegynder
07. december 2007 - 15:27 #13
lige en lille rettelse

Public Sub telefon()
Dim objform As fmsvagt

Set objform = New fmsvagt


streng = del_streng(Range("A2").Value)  ‘ her udtages en delstreng fra en celle (A2) i arket.

  objform.Show
 
streng1 = cmbnavn 
streng2 = txttlf                            ’ streng 1 og streng2  variabler fra userformen.

streng = streng + streng1 + streng2

[A2] = streng

Unload fmsvagt

End Sub
Avatar billede word-hajen Nybegynder
08. december 2007 - 11:30 #14
Hvad gør du på din Gem-knap? For hvis du ikke får returneret de 2 tekstværdier fra hhv. din combo- og textbox, lukker du formentlig formen i stedet for at skjule den.

Ikke noget med unload i din Gem-knap.... kun Me.hide.
Avatar billede richter1 Nybegynder
08. december 2007 - 13:28 #15
Jeg har kun me.hide. Men jeg har fundte en løsning, da jeg fik set lidt mere på  dit eksempel i kommentaren 21:48. Hvis ovenstående ændres til:

Public Sub telefon()
Dim objform As fmsvagt

Set objform = New fmsvagt


streng = del_streng(Range("A2").Value)  ‘ her udtages en delstreng fra en celle (A2) i arket.

  objform.Show
 
streng1 = objform.cmbnavn 
streng2 = objform.txttlf          ’ streng 1 og streng2  variabler fra userformen.

streng = streng + streng1 + streng2

[A2] = streng

Unload fmsvagt

End Sub

så virker det. Jeg mangler dog noget viden om objekter for selv at kunne bruge det aktivt. Jeg arbejder lige lidt videre med ovenstående.
Avatar billede richter1 Nybegynder
08. december 2007 - 17:42 #16
Det fungere helt som jeg gerne vil have det, så word-hajen læg venligst et svar.
Tak for hjælpen :O)
Avatar billede word-hajen Nybegynder
08. december 2007 - 22:25 #17
Velbekomme :-)
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