Zufälliger Artikel

Problemstellung:

Wie kann ich in der Statuszeile eines Formulars ein Progressbar darstellen?

Fast jeder stand schon mal vor der Situation ein Progressbar darstellen zu wollen.
Jetzt gibt es da einige Lösungen ob nun mit ActiveX-Controls oder anders.
Am einfachsten geht es mit dem SysCmd-Objekt.

Lösung:
Das SysCmd-Objekt hat 3 Methoden dafür.
acSysCmdInitMeter                zur Initialisierung der Progressbar

acSysCmdUpdateMeter        zur Aktualisierung der Progressbar

acSysCmdRemoveMeter      zum Löschen der Progressbar

1. Initialisierung der Pogressbar:

Dim RetVal As Variant
    RetVal = SysCmd(acSysCmdInitMeter, "Statuszeilentext", die Obergrenze)

2. Aktualisierung der Pogressbar:

For n = 1 To 10000000
    RetVal = SysCmd(acSysCmdUpdateMeter, n)
Next n

3. Löschen der Pogressbar:

RetVal = SysCmd(acSysCmdRemoveMeter) 

Hier ein konkretes Beispiel:

Sub Import(sFile As String)
    Dim rsIn As DAO.Recordset, rsOut As DAO.Recordset
    Dim RetVal As Variant, nCount As Long, n As Long
    Dim sInArt As String
    DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, "Material", sFile, True
    Set rsIn = CurrentDb.OpenRecordset("Material")
    Set rsOut = CurrentDb.OpenRecordset("tblArtikel")
    '************************************************************
    'Progressbar initialisieren
    rsIn.MoveLast
    nCount = rsIn.RecordCount
    rsIn.MoveFirst
    RetVal = SysCmd(acSysCmdInitMeter, "Datenimport...", nCount)
    '************************************************************
    Do While Not rsIn.EOF
        sInArt = rsIn!Artikel
        rsOut.FindFirst "Artikel = '" & sInArt & "'"
        If rsOut.NoMatch = True Then
            rsOut.AddNew
            rsOut!Artikel = rsIn!Artikel
            rsOut.Update
        Else
            rsOut.Edit
            rsOut!Bezeichnung = rsIn!Bezeichnung
            rsOut.Update
        End If
        rsIn.MoveNext
        rsOut.MoveFirst
        '************************************************************
        'Progressbar aktualisieren
        n = n + 1
        RetVal = SysCmd(acSysCmdUpdateMeter, n)
        '************************************************************
        CurrentDb.TableDefs.Delete "Material"
    Loop
    rsIn.Close: Set rsIn = Nothing
    rsOut.Close: Set rsOut = Nothing
    '************************************************************
    'Progressbar löschen
    RetVal = SysCmd(acSysCmdRemoveMeter)
    MsgBox "Datenimport beendet!", vbInformation + vbOKOnly, "Erfolg"
    '************************************************************
End Sub

Ergebnis:

 

Ähnliche Artikel

Home

1 1 1 1 1 1 1 1 1 1 Rating 0.00 (0 Votes)

Problemstellung:
Heute möchte ich mich mit der Errechnung von Zeiträumen als Abfragekriterium beschäftigen.
Fast jeder hat schon vor der Aufgabe gestanden, ich brauche die Daten des letzten Quartals oder
die Termine der nächste Woche.
Um jetzt zu den benötigten Datumsangaben zu kommen nehme ich meinen Tischkalender oder fange
an mir selbst etwas zu schreiben usw.
Und wie es dann in der Praxis aus, entweder man bekommt zwei Inputboxen vorgesetzt
„Bitte geben Sie das Startdatum ein:“.... Äh, nächste Woche erster Tag, wo ist der blöde Kalender?
Schöner wäre es man könnte Access sagen, Ich will die Daten „der nächsten Woche“.
Aber leider tut sich Access damit schwer oder will mich nicht verstehen.
Um dies aber doch zutun habe ich mal ein Funktion geschrieben, die diese Begriffe
„der nächsten Woche“ usw., übersetzt.
Das Ganze ist beliebig erweiterbar (s. weiter unten)
Das im Bsp. Enthaltene UFO ist nur aus Demozwecken enthalten und wird nicht zum Betrieb der
Funktion benötigt.

Voraussetzungen:
Das Bsp ist ab A97 lauffähig.

Funktionsweise:
Die Funktion "CalcDate" ermittelt dann das Start- bzw. Enddatum des gewählten Zeitraumes.

Listing s. Bsp-DB
Weiterhin sind einige Hilfsfunktionen im Modul enthalten die CalcDate benötigt:

    ' erster Tag der aktuellen Woche
    varFirstDayWeek = FirstDayWeek(dateDatum)
    ' erster Tag des aktuellen Quartals
    varQ_First = FirstDayQuartal(dateDatum)
    ' letzter Tag es aktuellen Quartals
    varQ_Last = LastDayQuartal(dateDatum)
    ' erster Tag des aktuellen Halbjahres
    varHbj_First = FirstDayHalfYear(dateDatum)
    ' letzter Tag des aktuellen Halbjahres
    varHbj_Last = LastDayHalfYear(dateDatum)

Syntax und Argumente:

CalcDate(dateDatum As Date, intValue As Integer, intFirstLast As Integer, strArt As String)

dateDatum = ein beliebiges gültiges Datum das als Bezugsdatum für die Funktion gilt
intValue = Berechnungsfaktor, ist in der Tabelle "tbl_Zeitraeume" hinterlegt (Start oder Ende)
intFirstLast = bei Wert -1 wird das Startdatum des gewählten Zeitraumes berechnet und bei 0 das Enddatum
strArt = Art des Zeitraumes, ist in der Tabelle "tbl_Zeitraeume" hinterlegt

Es gibt jetzt 2 Möglichkeiten das Bsp in der Praxis zu benutzen:

1. Möglichkeit:
Will man das Ganze, visuell (per Auswahl Kombifeld), in der Praxis zu nutzen muss man nur die Tabelle "tbl_Zeitraeume" und das Modul "mod_BerechnungenDatum" in seine DB kopieren.
Eine Kombifeld erstellen und den Zeitraum auswählen.
Der Funktion "CalcDate" werden dann die Spalten des Kombifeldes übergeben.
z.B.: für das Startdatum und das Enddatum (als Bezugsdatum wird hier das heutige Datum, Funktion Date(), genommen:

Me.txt_S = CalcDate(Date, Me.cmb_Zeit.Column(2), -1, Me.cmb_Zeit.Column(4))
Me.txt_E = CalcDate(varDate, Me.cmb_Zeit.Column(3), 0, Me.cmb_Zeit.Column(4))

Der Aufruf in der jeweiligen Abfrage wäre dann als Kriterium:

Zwischen [Formulare]![frm_Start]![txt_S] Und [Formulare]![frm_Start]![txt_E]

Aufbau der Tabelle „tbl_Zeiträume“:

lfd_Nr als Primärfeld = Nummernkreis der Zeiträume
Folgende Nummernkreise sind vorgegeben, können aber beliebig verändert werden.
10-99 Tage , 100-999 Wochen , 1000-1999 Monate , 2000-2999 Quartale, 3000-3999 Halbjahre , 4000-4999 Jahre

Zeitraum = eine beliebige Bezeichnung die Zeitraum beschreibt
Start = Bezugswert für das Startdatum zum Referenzdatum
Ende = Bezugswert für das Enddatum zum Referenzdatum
Kurz = Kurzbezeichnung für die Art des Zeitraumes, definiert den Bezugsfaktor
D = Tage für Tagesberechnungen
W= Tage für Wochenberechnungen
M = Monate für Monatsberechnungen
Q = Monate für Quartalsberechnungen
H = Monate für Halbjahresberechnungen
J = Jahre für Jahresberechnungen
Einheit = definiert die Einheit für die Felder Start und Ende (nur informativ)

Will man einen Zeitraum in die Tabelle neu eingegeben werden, sind folgende Werte zu setzten:

Lfd_Nr: z.B. 1021 (für den Nummernkreis Monate)
Start: -4
Ende: -1
Kurz: M (für Monatsberechnung)
Einheit: Monate

2. Möglichkeit:
Die Funktion "CalcDate" direkt der Abfrage als Kriterium übergeben.
(Tabelle „tbl_Zeiträume“ wird nicht benötigt)
z.B. die letzen 4 Monate, Referenz Datum Heute:

Zwischen CalcDate(Datum();-4;-1;"M") Und CalcDate(Datum();-1;0;"M")

Dateien:

Berechnen von Zeiträumen als Abfragekriterium

ab A97

Die Zip-Datei enthält ein Version für A97 und eine ab A00

Datum 05.02.2018
Dateigröße 102.55 KB
Download 4.430

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

1.png1.png9.png1.png5.png0.png8.png
Heute65
Gestern49
Diese Woche65
Dieser Monat1441
Total1191508

  • IP: 54.144.14.134
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

23. April 2018