01. maj 2006 - 15:37Der er
4 kommentarer og 1 løsning
Synkronisere to formularer
Hej igen
Jeg har en hovedformular med nogle kommandoknapper, der åbner andre formularer. Jeg er interesseret i, at Form2 synkroniseres når der skiftes record i Form1. Indtil videre virker det flot via noget kode, jeg har fundet, for en hovedformular og for EN Form2. Imidlertid vil jeg gerne tilføje flere knapper med hver deres Form2. Alle skal de synkroniseres når der skiftes i Form1.
Jeg har på Form1 (FirmaFrm) to knapper der hver åbner hhv (Kontaktperson_subFrm og OpgaveFrm. Det er kun den ene knap som virker, hvordan kan jeg ændre koden så flere forms kan styres?
Hertil er der en VBA kode der virker via
Private sub Form_current Private sub PersonKnap Samt et hjælpemodul. Jeg vedlægger koden, og håber på at høre, hvordan jeg kan ændre koden, så den også gælder for andre Form2
Jeg gætter på man kan tilpasse Private Sub Form_Current() ???
Herunder koden i modulet: Option Compare Database Option Explicit
Function IsLoaded(ByVal strFormName As String) As Boolean
' Returns True if the specified form is open in Form view or Datasheet view.
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If
End Function
* og resten af koden: Private Sub Form_Current() On Error GoTo Err_Form_Current
' Hvis Kontaktperson_subFrm form er åben, skal firmaets kontaktpersoner vises.
Dim strDocName As String Dim strLinkCriteria As String
Private Sub PersonKnap_Click() ' This code created in part by Command Button Wizard. On Error GoTo Err_PersonKnap_Click
Dim strMsg As String, strTitle As String Dim intStyle As Integer Dim strDocName As String, strLinkCriteria As String
' If Firmanavn control is blank, display a message. If IsNull(Me![Firmanavn]) Then strMsg = "Flyt dig til den virksomhedsnavn, hvis kontaktpersoner du ønsker at se, og klik så her igen" intStyle = vbOKOnly strTitle = "Vælg en virksomhed" MsgBox strMsg, intStyle, strTitle Me![Firmanavn].SetFocus Else ' Otherwise, open Kontaktperson_subFrm form, showing products for current supplier. strDocName = "Kontaktperson_subFrm" strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]" DoCmd.OpenForm strDocName, , , strLinkCriteria DoCmd.MoveSize (1400 * 0.78), (1400 * 0.78) End If
Desuden skriver du navnet på en form "Kontaktperson_subFrm", drejer det sig om en underformular, kan du synkronisere denne ved at bruge egenskaben over- og underordnede felter i underformularens egenskabsark. Men uanset hvad, så kræver det, at du lukker form2 for at skifte post i form1.
Hej Mugs Det virker allerede fint, at åbne og vise form2 med de korrekte data i fht Form1. Men jeg vil have at form2 synkroniserer sig med Form 1, efterhånden som man skifter poster i form1. Det virker i Microsofts Nwind database, som relationen ,mellem suppliers og products. I deres tilfælde har de bare kun EN komandoknap på Form1 (suppliers). Jeg vil gerne have flere...
OK nu har jeg selv fusket lidt med VBA. Her er en brugbar kode til at få flere formularer til at synkronisere sig. Dvs der er flere knapper på Form1 som hver åbner deres egen formular. I dette tilfælde er der 2 kommandoknapper på Form1 (FirmaFrm), den ene åbner en formular med firmaets kontaktpersoner, den anden en formular med firmaets opgaver. Begge formularer viser hele tiden de relevante poster, også når man skifter post i Form1.
Tricket ligger i Form_Current :
Sub Form_Current() On Error GoTo Err_Form_Current
Dim strDocName As String Dim strLinkCriteria As String
If IsLoaded("Kontaktperson_subFrm") Then ' Hvis Kontaktperson_subFrm form er åben, skal firmaets kontaktpersoner vises.
If IsNull(Me![Firmanavn]) Then Exit Sub ElseIf IsLoaded("Kontaktperson_subFrm") Then DoCmd.openform strDocName, , , strLinkCriteria End If ' slut på kontaktperson IF
ElseIf IsLoaded("OpgaveFrm") Then ' Hvis OpgaveFrm er åben, skal firmaets kontaktpersoner vises.
If IsNull(Me![Firmanavn]) Then Exit Sub ElseIf IsLoaded("Kontaktperson_subFrm") Then DoCmd.openform strDocName, , , strLinkCriteria End If ' slut på kontaktperson IF
ElseIf IsLoaded("OpgaveFrm") Then ' Hvis OpgaveFrm er åben, skal firmaets kontaktpersoner vises.
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.