Formulardaten werden erst beim zweiten Mal angezeigt

  • Word

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Volker Bunge.

    Formulardaten werden erst beim zweiten Mal angezeigt

    Hallo zusammen,

    habe mir ein Formular gebastelt, dass nicht so ganz will, wie ich es gerne möchte.

    Habe das ganze Projekt als Add-In eingebunden und wenn ich nun auf den Button im Ribbon klicke, dann macht sich auch mein Formular auf. Klicke ich dann auf den Button für Datei öffnen, kommt auch schön das Dialogfeld zur Auswahl der Datei. Der Dateipfad wird auch ordnungsgemäß zurück geliefert. Auch die folgenden Informationen werden ordnungsgemäß ermittelt.

    Was aber leider nicht passiert, ist die Anzeige im Formular. Erst wenn ich den o. g. Vorgang wiederhole, dann funktioniert er immer (solange ich Word nicht beende). Schließe ich Word und öffne es wieder, dann geht das Ganze wieder von vorne los.

    Da grundsätzlich ja wohl die Programmierung funktioniert, ist jetzt meine Frage, wo ran liegt es, dass es beim ersten Mal nach dem Wordstart nicht funktioniert?

    Habt Ihr einen Tipp?

    Vielen Dank

    Volker

    Volker Bunge schrieb:

    Was aber leider nicht passiert, ist die Anzeige im Formular. Erst wenn ich den o. g. Vorgang wiederhole, dann funktioniert er immer (solange ich Word nicht beende). Schließe ich Word und öffne es wieder, dann geht das Ganze wieder von vorne los.

    Was soll er denn hier machen? Zeige evtl. mal den Code.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    Hallo INOPIAE,

    Hier mal der Code aus dem Formular

    Spoiler anzeigen

    Quellcode

    1. Private Sub Btn_Serienbriefdatei_suchen_Click()
    2. ' ******************************************************************************************
    3. ' Hier kann über den Standarddialog die Serienbriefdatei gesucht werden und der kpl. Dateipfad wird dann zurückgegeben und angezeigt
    4. ' ******************************************************************************************
    5. ' Hilfsvariable festlegen
    6. Dim dlgDatei As Dialog
    7. Dim Dateipfad As String
    8. ' Den Standarddialog "Datei öffnen" wird angezeigt
    9. Set dlgDatei = Dialogs(wdDialogFileOpen)
    10. ' Der Rückgabewert wird nun ausgewertet
    11. With dlgDatei
    12. ' Wenn der Dialog angezeigt wird
    13. If .Display() Then
    14. ' Dann den Dateipfad sich in einer Variable merken
    15. Dateipfad = .Name
    16. MsgBox Dateipfad
    17. ' und ein paar Dinge bereinigen
    18. Dateipfad = Replace(Dateipfad, "/", "\")
    19. Dateipfad = Replace(Dateipfad, " ", " ")
    20. ' Nur den Dateinamen herausfinden (von hinten nach vorne) die einzelnen Zeichen durchlaufen
    21. For Z = Len(Dateipfad) To 1 Step -1
    22. ' Wenn das aktuelle Zeichen ein Backslash ist,
    23. If Mid(Dateipfad, Z, 1) = "\" Then
    24. ' Dann wird der Dateiname um den Verzeichnispfad ergänzt
    25. TBox_Serienbriefdatei.Text = CurDir() & "\" & Mid(Dateipfad, Z + 1, Len(Dateipfad))
    26. ' und die Schleife wird verlassen
    27. Exit For
    28. End If
    29. Next Z
    30. Else
    31. ' Falls der Benutzer den Dialog abgebrochen hat, dann dies kurz anzeigen
    32. MsgBox "Der Benutzer hat abgebrochen.", vbCritical
    33. ' und die weitere Verarbeitung abbrechen
    34. Exit Sub
    35. End If
    36. End With
    37. ' Die Eingabemaske verbergen
    38. Me.Hide
    39. ' Um nun einige Informationen direkt auslesen zu können, wird die Seriendruckdatei einmal kurz geöffnet
    40. Documents.Open SeriendruckPDF.TBox_Serienbriefdatei.Text
    41. ' Prüfen, ob es überhaupt Daten zum Drucken gibt
    42. If ActiveDocument.MailMerge.DataSource.RecordCount <= 0 Then
    43. ' Wenn es keine Datensätze gibt, die gedruckt werden sollen, dies kurz anzeigen
    44. MsgBox "Leider gibt es keine Datensätze, die gedruckt werden können. Prüfen Sie hierzu die Datenquelle bzw. die Filtereigenschaften und wiederholen Sie den Vorgang ggf. noch einmal."
    45. ' Das Dokument ohne zu speichern wieder schließen
    46. ActiveDocument.Close False
    47. ' und die weitere Verarbeitung abbrechen
    48. Exit Sub
    49. End If
    50. ' Die Seriendruckdatei-Quelle wird festgehalten
    51. TBox_Serienbriefdatenbank.Text = ActiveDocument.MailMerge.DataSource.Name
    52. ' Die Anzahl der druckfähigen Datensätze ermitteln und anzeigen
    53. TBox_AnzahlDatensaetze.Text = Format(ActiveDocument.MailMerge.DataSource.RecordCount, "#,###0")
    54. ' Den Filter für die zu druckenden Datensätze anzeigen
    55. TBox_Filter.Text = ActiveDocument.MailMerge.DataSource.QueryString
    56. ' Den Tabellennamen ermitteln
    57. TBox_Tabellenname.Text = Replace(SeriendruckdatenbankTabellenname_ermitteln(ActiveDocument.MailMerge.DataSource.TableName), " ", "_")
    58. ' Nun noch die möglichen Spaltennamen anzeigen. Erst einmal die alten Werte löschen
    59. CBox_Spaltennamen.Clear
    60. ' Die Datenfeldspalten durchlaufen
    61. For Each afield In ActiveDocument.MailMerge.DataSource.DataFields
    62. ' und die einzelnen Spaltenbezeichnunen in das Kombinationsfeld eintragen
    63. CBox_Spaltennamen.AddItem afield.Name
    64. Next afield
    65. ' Die Seriendruckdatei wieder schließen
    66. ActiveDocument.Close False
    67. ' und die Eingabemaske wieder anzeigen (Das Ergebnis der o. g. Aktionen ist somit sichtbar)
    68. SeriendruckPDF.Show
    69. End Sub


    Hoffe, das reicht.

    Gruß

    Volker
    Wenn ich das richtig verstehe, dann soll beim Starten des Formulars, der Pfad der letzten Datei bzw. die letzte Datei angezeigt werden.

    Dafür speicherst Du die Information irgendwo hin (z.B. eine INI-Datei), die Du beim Starten des Formulars wieder einliest.

    Warum die For-Schleife für den Dateinamen?

    Visual Basic-Quellcode

    1. TBox_Serienbriefdatei.Text = CurDir() & "\" & Mid(Dateipfad, InStrRev(Dateipfad,"\")+1)​
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo INOPIAE,

    es gibt in dem Formular einen Button "Btn_Serienbriefdatei_suchen", mit der man die Datei auswählen kann, die gleich bearbeitet werden soll.
    Danach erfolgen div. Verarbeitungsschritte.

    Gespeichert in einer INI - Datei oder ähnliches wird hier im gesamten Projekt nichts. Alle notwendigen Informationen kommen aus der ausgewählten Datei oder müssen noch im Formular angegeben werden.

    Die For-Schleife sollte mir den Dateinamen zurück liefern. Aber Dein Einzeiler ist natürlich genial. Die InstrRev - Funktion kannte ich noch nicht. Werde diese aber mal versuchen in meinen Code einfließen zu lassen.

    Gruß

    Volker