05. december 2007 - 20:31Der 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?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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.
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?
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.
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
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?
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
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?
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.
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.
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.
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.