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
Chrisir
,
29.09.2003, 15:36 Uhr
, 34 mal gelesen