Hej Hej, Jag försökte med det du skrev men får felmeddelandet: Körfel nr 91, Objektvariabel eller with-blockvariabel har inte angets. Vad har jag missat? Hej, Okej, jag blir bara snurrigare och snurrigare =) Hej När jag skriver Form2.show så klagar den på att det inte går att hitta metoden eller datamedlemmen och så är .show markerat. Pers lösning borde fungera. Formulär har ingen show-metod i Access. Du kan heller inte instansera formulär vad jag känner till. Jaaa!! Kanon. Nu fungerar det =) Jag använde det med standardvärde.Skicka variabler mellan formulär
Jag har ett formulär där man söker reda på den post man vill ha och får ett värde i en variabel. Ett nytt formulär öppnas i samma veva och här vill jag automatiskt lägga in värdet från förra formuläret i ett avfälten. Hur får jag med variabeln i övergången mellan formulär?
JessicaSv: Skicka variabler mellan formulär
Du kan göra på flera olika sätt.
Det enklaste är att göra så här:
<code>
'Formulär 1
Form2.Text1.Text = "Mitt nya värde!"
</code>
Detta förutsätter dock att ditt andra formulär heter Form2 och att din kontroll heter Text1. Ändra namnen vid behov.
Den snyggare varianten är att dölja implementeringen och istället skapa en wrapper i fromulär numemr två:
<code>
'Formulär 1
Form2.MinVariabel = "Mitt nya värde!"
'Formulär 2
Private mstrMinVariabel As String
Public Property Let MinVariabel(ByVal NyText As String)
mstrMinVariabel = NyText
If Len(mstrMinVariabel) > 10 Then
mstrMinVariabel = Left$(mstrMinVariabel, 10)
End If
Text1.Text = mstrMinVariabel
End Property
</code>
Det finns flera fördelar med exempel två, t.ex. att man gör sig inte beroende av implementationen i formuläret (du kan t.ex. byta ut din textruta mot en label utan att ändra koden i formulär ett). Eller som i exemplet ovan så kan man juster invärdet så att det inte överskrider vissa ramar (i mitt exempel begränsar jag maxlängden).
Lycka till!
// JohanSv:Skicka variabler mellan formulär
Formulär 1:
Private Sub Välj_projekt_DblClick(Cancel As Integer)
Dim Form2 As [Form_Lägg till nytt projekt]
Form2.MinVariabel = Välj_projekt.Value
DoCmd.OpenForm "Lägg till nytt projekt"
End Sub
Formulär 2:
Private mstrMinVariabel As String
Public Property Let MinVariabel(ByVal NyText As String)
mstrMinVariabel = NyText
Text178.Text = mstrMinVariabel
End PropertySv: Skicka variabler mellan formulär
Ditt fel beror på att du talar om att din variabel skall vara en referens till ett formulär av en viss typ, men du glömmer att tala om vilket just detta formuläret skall vara.
Ett exempel: Du talar i princip om att du skall köra en röd volvo S80, men inte vilken röda Volvo S80. Så i princip måste du ange registreringsnumret för att datorn skall fatta vilken du avser. Sedan har det ingen betydelse om det endast finns en enda röd Volvo så långt ögat kan nå... Datorer är dumma. :-)
Översatt till din kod så skal du göra så här:
<code>Private Sub Välj_projekt_DblClick(Cancel As Integer)
Dim Form2 As [Form_Lägg till nytt projekt]
Set Form2 = New [Form_Lägg till nytt projekt]
Form2.MinVariabel = Välj_projekt.Value
End Sub</code>
I princip alltså. Det magiska här är att du har en rad med New som skapar ditt formulär, eftersom det inte redan finns aktivt.
Om du nu har ett aktivt formulär så får du plötsligt två identiska aktiva formulär med ovanstående kod, så i det fallet är det bättre att skicka med en referens till existerande formulär till din funktion.
Notera nu också att om du vill manipulera ditt formulär (visa etc) så är det objektet Form2 du skall använda, du skall inte skapa fler formulär med DoCmd.OpenForm "Lägg till nytt projekt".
Lycka till!
// JohanSv:Skicka variabler mellan formulär
Hur öppnar jag Form2 om jag inte får använda DoCmd.OpenForm då?Sv: Skicka variabler mellan formulär
Varför inte bara sätta standardvärdet i fältet till...
[fältetiformulär2]=[Formulär]![formulär1namn].[fältetsnamniformulär1]
Det borde väl fungera?
/ PerSv:Skicka variabler mellan formulär
JessicaSv: Skicka variabler mellan formulär
/JohanSv:Skicka variabler mellan formulär
Tack båda två för hjälpen.
Jessica