Access VBA versucht, zum verweisen auf eine textbox aus einer anderen form
Ich bin mit Access-VBA, und ich bin versucht zu ändern bestehenden code hinzufügen ein popup-Feld angezeigt. Dieses popup-Fenster ist eine andere form, und wenn ein Benutzer klickt auf einen button auf diesem Formular möchte ich ein Textfeld auf der Basis Formular ausgefüllt werden. Nach, dass das popup verschwindet, und dann Brauch ich den Zugang, den Wert aus der textbox auf der Basis form.
Die Reihenfolge sollte wie folgt sein:
1) Basis-Schaltfläche klicken, ruft modal popup
2) Klicken Sie in der Schaltfläche auf dem popup-speichert Wert auf Basis des Formulars Textfeld, dann gibt die Steuerung.
3) Basis-form verwendet dann diesen Wert, etwas zu tun.
Ich habe einige code, aber es funktioniert nicht richtig. Kann jemand sehen was hier fehlt und mir helfen, richtig?
Base Form
Sub base()
DoCmd.OpenForm "PaperType", , , , , acDialog
MsgBox Me.TheAnswer 'This line gives a null error
End Sub
Popup-Formular
Private Sub btnRolls_Click()
'Me.Tag = 1
Forms!ReceiptDetail_sfrm!TheAnswer = 1
Me.Visible = False
End Sub
Private Sub btnSheets_Click()
'Me.Tag = 4
Forms!("ReceiptDetail_sfrm").TheAnswer = 4
Me.Visible = False
End Sub
InformationsquelleAutor MAW74656 | 2010-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es genau so machen, brauchen Sie wahrscheinlich etwas wie:
Ich habe getan, was Sie tun, viele Male. Ich bin nicht bei der Arbeit zu überprüfen, meine code jetzt für ein Beispiel, aber es ist machbar.
Forms!MainForm!SubformControlName.Form!TheAnswer
. Alternativ sehen die pop-up versteckt, kann es bezeichnet werden, so TheAnswer geschrieben werden konnte, um die Tag-Eigenschaft des pop-up und bezeichnet die wichtigste form.Ich denke, Sie können überspringen Sie die refresh-Linie.
InformationsquelleAutor Mindflux
Was ich eher zu tun ist, verbergen das popup, dann Lesen es:
Hauptformular:
Popup
Stellen Sie sicher, dass entweder A) Ihr popup kann nicht geschlossen werden, aus der form selbst, oder B) den aufrufenden code behandelt den Fehler, zu versuchen, etwas zu Lesen, das ist nicht mehr geladen (oder beides).
InformationsquelleAutor RolandTumble
Offenbar die richtige Antwort ist: "Don' T do it this way!". Anstatt zu versuchen, die übergabe von Daten zwischen den Formen, die ist ein Schmerz, ich habe eine Tabelle in Access, die nur 1 Feld in 1-Datensatz. Dann Speichere ich den Wert in es mit DoCmd.RunSQL und rufen es aus dem anderen Formular mit DLOOKUP().
Keine Sorge, ich weiß das. Aber am Ende des Tages, es funktioniert und es ist nicht langsam. Seine hässlichen code, sondern versuchen, zu verwenden .Tag und versuchen Verweis auf die form, die auf andere Weise nicht für mich arbeiten nach Stunden. Ich habe nicht viel Erfahrung mit VBA.
Ich keine downvotes leicht.... Dies kann nicht "langsam" in einer einzigen Access-Datei, die auf der lokalen Maschine, aber es ist ein wirklich schlechte Angewohnheit, in zu erhalten. Nicht beteiligt ist, Ihre Daten in Ihrem code, wenn Sie es vermeiden können-und es gibt mehrere Möglichkeiten, Sie zu vermeiden hier. Was, wenn Sie hatte ein langsames Netzwerk zwischen Ihrer form und Ihrem temp-Tabelle? Auch eine Globale variable riecht weniger schlimm als diese.
Ich denke, die situation ist nicht egal, und da dies IST eine einzelne access-Datei auf einem lokalen Rechner, und nicht bei einem Netzwerk-Laufwerk, von der Geschwindigkeit Ihres Netzwerks betreffen, nicht gelten. Auch ich habe zu analysieren, die Kosten hier. Wie lange kann ich verbringen das lernen mehr über eine alte Plattform, bevor der nutzen überwiegt die Kosten? Und die Sorge um meine Programmier-Gewohnheiten nicht gelten, denn ich bin nicht die Entwicklung neuer Anwendungen in VBA, und nicht wollen. C#.NET ist meine Plattform der Wahl.
Die alternative Lösung ist nicht langsam, entweder. Und es gibt viel saubereren code, und hält die Formen wieder verwendbar. Du bist einfach falsch hier.
InformationsquelleAutor MAW74656