vba-schulung 2003-03-27/28lesen und schreiben von daten 2 erstellung von formularen und...
TRANSCRIPT
Lesen und Schreiben von Daten
2VBA-Schulung 2003-03-27/28
Erstellung von Formularen und
Datenverarbeitung
Lesen und Schreiben von Daten
3VBA-Schulung 2003-03-27/28
ÜberblickEntwicklung von Formularen Datenverarbeitung
Daten lesen,Daten bearbeiten,Daten schreiben
Klassisches EVA (Eingabe, Verarbeitung, Ausgabe)-Prinzip
Lesen und Schreiben von Daten
4VBA-Schulung 2003-03-27/28
ZielErleichterung der Erfassung von Rechnungspositionen mit Hilfe eines VBA-Formulars:„Rechnungs-Assistent“
Aufruf aus dem Menü „Aktionen“Anzeige aller ArtikelErstellen von neuen Rechnungsdatensätzen und neuen RechnungspositionenPlausibilitätsprüfungen
Lesen und Schreiben von Daten
5VBA-Schulung 2003-03-27/28
FormularNeues Formular erstellen
„Einfügen - UserForm“
Name: FInvoiceWizardCaption: Rechnungs-Assistent
Lesen und Schreiben von Daten
6VBA-Schulung 2003-03-27/28
FormularSteuerelemente für den Rechnungsdatensatz
fraRechnung (Frame)
dtpDatum (DTPicker)
cboVersand (ComboBox)
cboZahlungsweise (ComboBox)
cboLieferart (ComboBox)
+ Beschriftugen
(Labels)
cmdNeueRechnung
(CommandButton)
Lesen und Schreiben von Daten
7VBA-Schulung 2003-03-27/28
FormularSteuerelemente für die Rechnungspositionen
fraRechnungspositionen (Frame)
+ Beschriftugen
(Labels)
cboEinheit (ComboBox)
txtPreis (TextBox)
lblGesamt (Label)
txtAnzahl (TextBox)
txtArtikel (TextBox)
cmdNeuePosition (CommandButton)
Lesen und Schreiben von Daten
8VBA-Schulung 2003-03-27/28
FormularSteuerelement für die Artikelliste
lvwArtikel (ListView)
cmdClose (CommandButton)
Lesen und Schreiben von Daten
9VBA-Schulung 2003-03-27/28
Formular
Lesen und Schreiben von Daten
10VBA-Schulung 2003-03-27/28
Haben Sie
Fragen?
Lesen und Schreiben von Daten
11VBA-Schulung 2003-03-27/28
QuellcodeBenötigte Prozeduren:
Initialisieren der SteuerelementeEinlesen von persistenten VariablenEinlesen der Artikelliste
Anlegen einer neuen RechnungAnlegen von RechnungspositionenÜbernehmen der Artikeldaten in Steuerelemente der RechnungspositionenAnzeige der Summe der aktuellen Position
Lesen und Schreiben von Daten
12VBA-Schulung 2003-03-27/28
QuellcodeDeklarationen auf Modulebene
' Konstante für Fehlerbehandlung
Private Const csErrSource = "FInvoiceWizard"
' Variablen für Tabellenobjekte
Private mtblInvoices As OrgDbServer31.Table
Private mtblPositions As OrgDbServer31.Table
Private mtblArticles As OrgDbServer31.Table
Lesen und Schreiben von Daten
13VBA-Schulung 2003-03-27/28
QuellcodeProzedur Init()
Public Sub Init()
' Initialisierungen: Einlesen der Auswahllisten, Initialisieren der modulweiten Variablen
Dim pvars As PersistVars
Dim itm As ListItem
On Error GoTo ErrHandler
Lesen und Schreiben von Daten
14VBA-Schulung 2003-03-27/28
QuellcodeProzedur Init()
' Variablen initialisieren
Set mtblInvoices = gTables.GetTable(dbtblRechnungen)
Set mtblPositions = gTables.GetTable(dbtblRechnungspositionen)
Set mtblArticles = gTables.GetTable(dbtblArtikel)
Lesen und Schreiben von Daten
15VBA-Schulung 2003-03-27/28
QuellcodeProzedur Init()
' Auswahllisten einlesen
Set pvars = Database.Parser.PersistVars
With gobjDatabaseSupport
.LoadPersVarsCombobox pvars("lt_Versandkosten"), cboVersand
.LoadPersVarsCombobox pvars("lt_Zahlungsweise"), cboZahlungsweise
.LoadPersVarsCombobox pvars("lt_Lieferart"), cboLieferart
.LoadPersVarsCombobox pvars("lt_Einheit"), cboEinheit
End With
Lesen und Schreiben von Daten
16VBA-Schulung 2003-03-27/28
QuellcodeProzedur Init()
' Artikel einlesen
lvwArtikel.ListItems.Clear
With mtblArticles
.GoTop ORGDB_NAV_NOEVENTS
Do While Not .EOF
Set itm = lvwArtikel.ListItems.Add(Text:=.Fields("Bezeichnung").Value)
itm.ListSubItems.Add Text:=.Fields("Art").Value
itm.ListSubItems.Add Text:=.Fields("Einheit").Value
itm.ListSubItems.Add Text:=.Fields("Nettopreis").Value
.Skip 1, ORGDB_NAV_NOEVENTS
Loop
End With
Lesen und Schreiben von Daten
17VBA-Schulung 2003-03-27/28
QuellcodeProzedur Init()
Exit Sub
ErrHandler:
gErrors.DisplayError csErrSource & ".Init"
End Sub
Lesen und Schreiben von Daten
18VBA-Schulung 2003-03-27/28
QuellcodeAufrufprozeduren
Im Modul Invoicing neue Prozedur ShowInvoiceWizard()
Public Sub ShowInvoiceWizard()
' Rechnungs-Assistenten aufrufen
Dim frmWizard As New FInvoiceWizard
With frmWizard
.Init
.Show vbModal
End With
End Sub
Lesen und Schreiben von Daten
19VBA-Schulung 2003-03-27/28
QuellcodeAufrufprozeduren
Im Modul UserMacros neue Prozedur ShowInvoiceWizard()
Public Sub ShowInvoiceWizard()
' Rechnungs-Assistenten aufrufen
InitGlobalObjects
Invoicing.ShowInvoiceWizard
End Sub
Lesen und Schreiben von Daten
20VBA-Schulung 2003-03-27/28
QuellcodeErster Test: Im Direktbereich (Strg+G)
UserMacros.ShowInvoiceWizard
eingeben
Lesen und Schreiben von Daten
21VBA-Schulung 2003-03-27/28
Es funktioniert!
Lesen und Schreiben von Daten
22VBA-Schulung 2003-03-27/28
Haben Sie
Fragen?
Lesen und Schreiben von Daten
23VBA-Schulung 2003-03-27/28
QuellcodeWir machen weiter: Rechnung speichern
Private Sub cmdNeueRechnung_Click()
' Neuen Rechnungsdatensatz anlegen
On Error GoTo ErrHandler
...
Exit Sub
ErrHandler:
gErrors.DisplayError csErrSource & ".cmdNeueRechnung_Click"
End Sub
Lesen und Schreiben von Daten
24VBA-Schulung 2003-03-27/28
QuellcodeRechnung speichern II
With mtblInvoices
' Datensatzpuffer leeren und Feldvorbelegungen auswerten
.Record = .DefaultRecord
.Fields("Datum").Value = dtpDatum.Value
.Fields("Versandkosten").Value = cboVersand.Text
.Fields("Zahlungsweise").Value = cboZahlungsweise.Text
.Fields("Lieferart").Value = cboLieferart.Text
.Insert
End With
Lesen und Schreiben von Daten
25VBA-Schulung 2003-03-27/28
QuellcodePosition speichern
Private Sub cmdNeuePosition_Click()
' Neue Rechnungsposition anlegen
On Error GoTo ErrHandler
With mtblPositions
' Datensatzpuffer leeren und Feldvorbelegungen auswerten
.Record = .DefaultRecord
.Fields("Artikel").Value = txtArtikel.Value
.Fields("Anzahl").Value = txtAnzahl.Text
.Fields("Einheit").Value = cboEinheit.Text
.Fields("Nettopreis").Value = txtPreis.Text
.Insert
End With
Lesen und Schreiben von Daten
26VBA-Schulung 2003-03-27/28
QuellcodeArtikeldaten übernehmen
Private Sub lvwArtikel_DblClick()
' Beim Doppelklick auf die Artikelliste sollen die Daten des ausgewählten
' Artikels in die Rechnungsposition übernommen werden
On Error GoTo ErrHandler
...
Exit Sub
ErrHandler:
gErrors.DisplayError csErrSource & ".lvwArtikel_DblClick"
End Sub
Lesen und Schreiben von Daten
27VBA-Schulung 2003-03-27/28
QuellcodeArtikeldaten übernehmen II
' Gibt es einen ausgewählten Artikel?
If lvwArtikel.SelectedItem Is Nothing Then Exit Sub
' Daten übernehmen
With lvwArtikel.SelectedItem
txtArtikel.Text = .Text
cboEinheit.Text = .ListSubItems(2).Text
txtPreis.Text = .ListSubItems(3).Text
End With
' Anzahl auf 1 setzen
txtAnzahl.Text = "1"
Lesen und Schreiben von Daten
28VBA-Schulung 2003-03-27/28
QuellcodeSumme der aktuellen Position anzeigen
Aufruf von txtAnzahl_Change() und txtPreis_Change()
Private Sub SummeAktualisieren()
' Gesamtpreis berechnen
lblGesamt.Caption = Val(txtAnzahl.Text) * Val(txtPreis.Text)
End Sub
Lesen und Schreiben von Daten
29VBA-Schulung 2003-03-27/28
QuellcodeFormular schliessen
Private Sub cmdClose_Click()
' Formular schließen
Me.Hide
End Sub
Lesen und Schreiben von Daten
30VBA-Schulung 2003-03-27/28
OberflächeWir binden das Makro in die Oberfläche ein:
Über den Menüpunkt AktionenÜber eine Schaltfläche
Wir testen...
Lesen und Schreiben von Daten
31VBA-Schulung 2003-03-27/28
Es funktioniert noch immer und noch
besser!
Lesen und Schreiben von Daten
32VBA-Schulung 2003-03-27/28
QuellcodePlausibilitätsprüfungen
Artikelname darf nicht leer seinAnzahl muss grösser als 0 seinWenn eine dieser Bedingungen nicht erfüllt ist, dann soll die Position gar nicht gespeichert werdenDer Cursor soll in das fehlerverursachende Eingabefeld platziert werden
Lesen und Schreiben von Daten
33VBA-Schulung 2003-03-27/28
QuellcodePrivate Function PlausibilitätsprüfungPosition() As Boolean
' Plausibilitätsprüfung der Angaben zur Rechnungsposition
' Beim ersten Fehler wird die Funktion verlassen
' Artikelname darf nicht leer sein
If txtArtikel.Text = "" Then
MsgBox "Bitte geben Sie einen Artikelnamen ein.", vbExclamation, MsgBoxTitle
txtArtikel.SetFocus
PlausibilitätsprüfungPosition = False
Exit Function
End If
...
Lesen und Schreiben von Daten
34VBA-Schulung 2003-03-27/28
Quellcode...
' Anzahl muss größer als 0 sein
If Val(txtAnzahl.Text) = 0 Then
MsgBox "Anzahl muss größer als 0 sein.", vbExclamation, MsgBoxTitle
txtAnzahl.SetFocus
PlausibilitätsprüfungPosition = False
Exit Function
End If
' Wenn wir hier angelangt sind, dann sind keine Fehler aufgetreten
PlausibilitätsprüfungPosition = True
End Function
Lesen und Schreiben von Daten
35VBA-Schulung 2003-03-27/28
QuellcodeAufruf der Plausibilitätsprüfung
Private Sub cmdNeuePosition_Click()
' Neuen Rechnungsposition anlegen
On Error GoTo ErrHandler
' Plausibilitätsprüfung der Angaben
If Not PlausibilitätsprüfungPosition Then Exit Sub
With mtblPositions
...
Lesen und Schreiben von Daten
36VBA-Schulung 2003-03-27/28
OberflächeWir testen...
Lesen und Schreiben von Daten
37VBA-Schulung 2003-03-27/28
Haben Sie
Fragen?
Lesen und Schreiben von Daten
38VBA-Schulung 2003-03-27/28
Vielen Dank für Ihre Aufmerksamkeit