title image


Smiley Der Code mit AutoNew und InputBox


So, Viel Glück damit.



Ich hatte schon früher programmiert und die Erfahrung fließt natürlich mit ein... aber 1 Jahr würde ich schon rechnen.

Es gibt schnell Erfolgserlebnisse, da man Makros aufzeichnen und dann modifizieren kann, aber bis man wirklich immer Herr der Lage ist... ich habe auch noch manchmal Fragen.



Zu Deinen Fragen:



1) ist das VBA ?

Ja.



2) kann man sich sowas selber beibringen, z.B. mit VBA 5 in 21 Tagen?

Ja. Wobei 21 Tage heißt: Du machst nichts anderes, 8 Stunden am Tag. Habe ich hier irgendwo gelesen, ich kenne das gar nicht.













Option Explicit



' Version 2 mit Inputbox.



' Modul mit zwei Programmen.

' Das erste Programm MakroErstelleVorlage()

' wird nur selten zur Wartung aufgerufen.

' Es erstellt eine Dokumentenvorlage mit

' Dokumentenvariablen und Felder, die auf

' diese Dokumentenvariablen verweisen.

' Dokumentenvariablen und Felder werden mit Testdaten

' gefüllt.

'

' Die Felder können dann mit Text (z.B. Name der Krankenkasse,

' Adresse Patient) ergänzt werden und auch anders angeordnet werden

' (Menü Tabelle | Umwandeln | Tabelle in Text).

' Dann wird die Vorlage gespeichert. Achtung: Auch ein Leerzeichen kann ein Feld sein.

' Es ist dann aber nicht grau hinterlegt (auch wenn Menü Extras | Optionen, Ansicht

' Feldschattierung "Immer" an ist); schalten Sie also die Sonderzeichen an.

' Oder passen Sie im Programm MakroErstelleVorlage den Testdatensatz an, dass keine zwei

' Fragezeichen nacheinander stehen (= leeres Feld). Sie wechseln mit Alt-F9 zwischen

' Feldfunktion und Feldwert (Die Punkte wandeln sich in einen Ausdruck

' wie DOCVARIABLE Eintrag12 \* MERGEFORMAT).

'

' Kommt nun ein neuer Datensatz, so wird die Vorlage geöffnet; dadurch

' entsteht ja ein neues Dokument mit gleichem Aussehen wie die Vorlage (Kopie).

' Um nun die Felder auf den neuen Datensatz zu aktualisieren, kommt das zweite

' Programm MakroVariablenEintragen zum Einsatz. Es schreibt die neuen Feldwerte

' in die Dokumentenvariablen und aktuelisiert die Felder, die auf

' diese Dokumentenvariablen verweisen (allerdings nicht in Kopf- und Fußzeile etc.).

' Dann wird das neue Dokument gespeichert (Abrechnung Patient XY).

'

' Dieses zweite Programm MakroVariablenEintragen wird also sehr oft benutzt.

'

' Die DokumentenVariablen heissen Eintrag0, Eintrag1 usw. bis Eintrag16.

' Das zweite Programm MakroVariablenEintragen führt Tests durch, ob das Dokument,

' was geladen ist, korrekt ist, also ob es die Variablen und Felder enthält.

' Es bricht aber nicht ab, wenn dies nicht gegeben ist (nur wenn gar kein Dokument offen ist).

' Auch wenn es das falsche Dokument war, enthält dieses deshalb danach die Variablen,

' jedoch unsichtbar, da ohne die Felder.

'



Sub AutoNew()

    ' AutoStart

    ' Außer AutoNew gibt es auch AutoOpen und AutoExec etc.

    ' ruft MakroVariablenEintragen auf, der weiter unten steht

    MakroVariablenEintragen

End Sub



Sub MakroErstelleVorlage()

    '

    ' Vorlage mit Feldern und Dokumentenvariablen erstellen

    '



    Const strTitel = "Dokumentenvorlage erstellen"



    Dim arrMeinArray()              As String

    Dim strEingeleseneDaten         As String

    Dim intObergrenze               As Integer

    Dim intI                        As Integer

    Dim strDocVariablenName         As String

    Dim boolMitVarNamenAusgeben     As Boolean

    Dim intAntwort                  As Integer





    WordBasic.DisableAutoMacros



    intAntwort = MsgBox("Es wird eine neue Dokumentenvorlage erstellt, die als Grundlage späterer Dokumente dient. " & _

                        vbNewLine & _

                        "Dies ist ein Wartungsprogramm. " & _

                        vbNewLine & _

                        "Wollen Sie die Variablennamen mit ausgeben? " & _

                        vbNewLine & _

                        "Wenn Sie unsicher sind, drücken Sie Abbrechen.", _

                        vbYesNoCancel, _

                        strTitel)

    

    Select Case intAntwort

        Case vbYes

            boolMitVarNamenAusgeben = True

        Case vbNo

            boolMitVarNamenAusgeben = False

        Case vbCancel

            End

        Case Else

            MsgBox "Programmfehler", vbCritical, strTitel

    End Select

    

    ' Datensatz in dieser Form ausgegeben

    strEingeleseneDaten = "Ratlosen Krankenkasse?1234567?47011?0123456789?0077?1??Rudi??Ratlos?11111749?Ratlosstrasse 4711??43123?Frageheim?0606?"

    

    ' Neue Vorlage:

    Documents.Add _

        NewTemplate:=True, _

        DocumentType:=0

    

    arrMeinArray = Split(strEingeleseneDaten, "?", -1)

    intObergrenze = UBound(arrMeinArray)

    

    Selection.TypeParagraph

    Selection.TypeParagraph

    Selection.TypeParagraph

    Selection.EndKey unit:=wdStory, Extend:=wdMove

    

    ActiveDocument.Tables.Add Selection.Range, 1, 1

    

    For intI = 0 To intObergrenze

    

        strDocVariablenName = "Eintrag" & Trim(Str(intI))

        If arrMeinArray(intI) = "" Then arrMeinArray(intI) = " "

        ActiveDocument.Variables.Add strDocVariablenName, arrMeinArray(intI)

        ActiveDocument.Tables(1).Rows.Last.Cells(1).Range.Select

        

        If boolMitVarNamenAusgeben Then

            Selection.TypeText strDocVariablenName & ": "

            ActiveDocument.Tables(1).Rows.Last.Cells(1).Range.Select

            Selection.Collapse wdCollapseEnd

            Selection.MoveLeft unit:=wdCharacter, Count:=1

        End If

        

        Selection.Collapse wdCollapseStart

                

        ActiveDocument.Fields.Add _

                      Range:=Selection.Range, _

                      Type:=wdFieldDocVariable, _

                      Text:=strDocVariablenName

        

        ActiveDocument.Tables(1).Rows.Add

    

    Next intI

    

End Sub

    

     

Sub MakroVariablenEintragen()

    '

    ' Neuer Datensatz: Variablen belegen und Felder aktualisieren.

    ' Die Variablen und Felder sollten schon existieren.

    '



    Const strTitel = "In das Formular neuen Patienten eintragen"



    Dim arrMeinArray()          As String

    Dim strEingeleseneDaten     As String

    Dim intObergrenze           As Integer

    Dim intI                    As Integer

    Dim strDocVariablenName     As String

    Dim varMyVariable           As Variable

    Dim intCountVars            As Integer

    Dim strMeldung              As String

    



    ' Datensatz in dieser Form ausgegeben

    ' strEingeleseneDaten = "Antwort-Krankenkasse?1234567?47011?0123456789?0077?1??Werner??Beraten?11111749?Beratenstrasse 4711??43123?Antwortheim?0606?"

    

    strEingeleseneDaten = Einlesen(strTitel)

    

    ' Ggf. Abbruch

    If strEingeleseneDaten = "" Then

        

        strMeldung = "Abbruch gewünscht."

        MsgBox strMeldung, _

               vbInformation, _

               strTitel

        End

        

    End If

        

    ' Ggf. Abbruch

    If Documents.Count = 0 Then

        MsgBox "Kein Dokument offen." & _

               vbNewLine & _

               "Bitte öffnen Sie das Dokument mit den fertigen Feldern, " & _

               vbNewLine & _

               "was durch das Programm ""MakroErstelleVorlage"" erstellt wurde. " & _

               vbNewLine & _

               "Abbruch.", _

               vbInformation, _

               strTitel

        End

    End If

    

    arrMeinArray = Split(strEingeleseneDaten, "?", -1)

    intObergrenze = UBound(arrMeinArray, 1)

    

    ' Tests, ob das Dokument korrekt ist.   ***

    

    ' Wenn eine Variable gelöscht wurde: intObergrenze - 1 setzen (s.u. Feld).

    If ActiveDocument.Variables.Count < intObergrenze Then

        MsgBox "Wahrscheinlich falsches Dokument geöffnet: " & _

               "Die Anzahl der Variablen beträgt " & _

               ActiveDocument.Variables.Count & _

               "; erwartet waren " & _

               intObergrenze & _

               ".", _

               vbInformation, _

               strTitel

    End If

    

    ' Wenn z.B. ein Feld gelöscht wurde, die Abfrage

    ' "If ActiveDocument.Fields.Count < intObergrenze Then" ändern in

    ' "If ActiveDocument.Fields.Count < intObergrenze - 1 Then" oder

    ' "If ActiveDocument.Fields.Count < intObergrenze - 4 Then" etc.

    If ActiveDocument.Fields.Count < intObergrenze Then

        MsgBox "Wahrscheinlich falsches Dokument geöffnet: " & _

               "Die Anzahl der Felder beträgt " & _

               ActiveDocument.Fields.Count & _

               "; erwartet waren " & _

               intObergrenze & _

               ".", _

               vbInformation, _

               strTitel

    End If

    

    ' Grob die Namen der Variablen prüfen

    ' (falls es andere Variablen waren, die eben gezählt worden sind)

    For Each varMyVariable In ActiveDocument.Variables

        If Left(varMyVariable.Name, Len("Eintrag")) = "Eintrag" Then

            intCountVars = intCountVars + 1

        End If

    Next varMyVariable

    

    If intCountVars < intObergrenze Then

        MsgBox "Wahrscheinlich falsches Dokument geöffnet: " & _

               vbNewLine & _

               "Die Anzahl der Variablen passenden Namens beträgt " & _

               intCountVars & _

               "; erwartet waren " & _

               intObergrenze & _

               ".", _

               vbInformation, _

               strTitel

    End If

    

    ' Ende der Tests  ***

    

    ' Start der Arbeit  ***

    

    ' Variablenwerte setzen

    For intI = 0 To intObergrenze

    

        strDocVariablenName = "Eintrag" & Trim(Str(intI))

        If arrMeinArray(intI) = "" Then arrMeinArray(intI) = " "

        ActiveDocument.Variables(strDocVariablenName).Value = arrMeinArray(intI)

    

    Next intI

    

    ' Felder aktualisieren

    ActiveDocument.Fields.Update



End Sub





Private Function Einlesen(strLokalTitel As String)

    

    Dim strBuffer   As String

    Dim strMeldung  As String

    

    

    strMeldung = "Dieses Eingabefeld sollte automatisch gefüllt werden. " & _

                 vbNewLine & vbNewLine & _

                 "Bitte stecken Sie nun die Karte ein. " & _

                 "Wenn die Karte schon steckt, diese bitte herausziehen und erneut einstecken. " & _

                 vbNewLine & _

                 "Drücken Sie dann die Eingabetaste oder klicken Sie OK. " & _

                 vbNewLine & vbNewLine & "Danke!" & vbNewLine

                 

    strBuffer = InputBox(strMeldung, _

                         strLokalTitel, _

                         "")

                         

    Einlesen = strBuffer

    

End Function









Code eingefügt mit Syntaxhighlighter 2.2









geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: