Avatar billede torejessen Nybegynder
01. maj 2006 - 15:37 Der 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.

    Const conObjStateClosed = 0
    Const conDesignView = 0

    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

        strDocName = "Kontaktperson_subFrm"
        strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
 
    If IsNull(Me![Firmanavn]) Then
        Exit Sub
    ElseIf IsLoaded("Kontaktperson_subFrm") Then
        DoCmd.OpenForm strDocName, , , strLinkCriteria
    End If

Exit_Form_Current:
    Exit Sub
   
Err_Form_Current:
    MsgBox Err.Description
    Resume Exit_Form_Current

End Sub







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
   
Exit_PersonKnap_Click:
    Exit Sub
   
Err_PersonKnap_Click:
    MsgBox Err.Description
    Resume Exit_PersonKnap_Click
   
End Sub
Avatar billede torejessen Nybegynder
01. maj 2006 - 15:50 #1
Kan det være noget med at ændre i Form_Current()
således at man skriver
case 1 Kontaktper_subFrm er åben
case 2 OpgaveFrm er åben osv..?

- Bare et forslag, jeg kan ikke selv kode det...
Avatar billede mugs Novice
01. maj 2006 - 16:56 #2
Denne åbner form2 i den post du står i i form1. Felt1 er et unikt ID for den pågældende post.

DoCmd.OpenForm "Form2"
Forms!Form2!Felt1.SetFocus
DoCmd.FindRecord Me!Felt1

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.
Avatar billede torejessen Nybegynder
01. maj 2006 - 17:04 #3
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...
Avatar billede torejessen Nybegynder
02. maj 2006 - 12:20 #4
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.

            strDocName = "Kontaktperson_subFrm"
            strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
   
        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.

            strDocName = "OpgaveFrm"
            strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
   
        If IsNull(Me![Firmanavn]) Then
            Exit Sub
        ElseIf IsLoaded("OpgaveFrm") Then
            DoCmd.openform strDocName, , , strLinkCriteria
        End If

       
       
       
End If
   
Exit_Form_Current:
    Exit Sub
   
Err_Form_Current:
    MsgBox Err.Description
    Resume Exit_Form_Current

End Sub


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.

            strDocName = "Kontaktperson_subFrm"
            strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
   
        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.

            strDocName = "OpgaveFrm"
            strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
   
        If IsNull(Me![Firmanavn]) Then
            Exit Sub
        ElseIf IsLoaded("OpgaveFrm") Then
            DoCmd.openform strDocName, , , strLinkCriteria
        End If

       
       
       
End If
   
Exit_Form_Current:
    Exit Sub
   
Err_Form_Current:
    MsgBox Err.Description
    Resume Exit_Form_Current

End Sub
Avatar billede torejessen Nybegynder
19. juni 2006 - 11:19 #5
svar
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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