[MS Access] Daten per VBA Code nach CSV exportieren

Private Sub btnExportToCSV_Click()
    Dim fd As String
    Dim Filename As String  ' Ziel-Dateiname mit Pfad
    Dim SQL As String       ' Name der Tabelle oder SQL-String
    Dim rs As Recordset     ' Recordset
    Dim FileDesc As Variant ' Filedescriptor
    
    fd = ";"                ' Feld-Separator (z.B.: Semikolon)
    
    Filename = "c:\Temp\Test.csv"
    
    SQL = "SELECT timestamp, value FROM TableName WHERE timestamp >= #06/23/2011 00:00:00# AND timestamp <= #06/25/2011 00:00:00# ORDER BY timestamp;"
   
    If Dir(Filename) <> "" Then
        If MsgBox("Datei " & Filename & " vorhanden! Überschreiben?", vbQuestion + vbYesNoCancel + vbDefaultButton2) = vbYes Then
            ' Datei löschen
            Kill Filename
        Else
            ' Funktion beenden
            Exit Sub
        End If
    End If
   
    ' Datenquelle als Recordset öffnen
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot)
    rs.MoveFirst
    
    ' Datei initialisieren und öffnen
    FileDesc = FreeFile
    Open Filename For Output As FileDesc
      
    ' Überschriften schreiben
    Print #FileDesc, "timestamp" & fd & "signal"
    
    ' Datensätze der Tabelle durchlaufen und "Zeitstempel;Wert" schreiben
    Do While Not rs.EOF
      z = rs![timestamp] & fd & rs![value]
      Print #FileDesc, z
      rs.MoveNext
    Loop
   
    ' aufräumen
    Close #FileDesc
    rs.Close
    Set rs = Nothing
   
    MsgBox "Datei geschrieben: " & Filename
End Sub

[MS Access] DateiDialog (ÖffnenDialog) anzeigen, eine Bild-Datei auswählen und diese auf einem Formular anzeigen

Auf dem Formular müssen mind. ein Textfeld namens ‘Dateipfad’, ein Button ‘btnOpenImage’ und ein Bild ‘picImage’ liegen.

Option Compare Database
Option Explicit

Private Sub btnOpenImage_Click()
   ' im Codefenster (Visual Basic-Editor) im Menü Extras->Verweise->Microsoft Office 12.0-Objektbibliothek hinzufügen (anhaken)
   Dim fDialog As Office.FileDialog
   Dim varFile As Variant

   ' Dialog vom Typ FilePicker erzeugen
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
   With fDialog
      .Title = "Bitte ein Bild auswählen"
      
      ' erstmal Mehrfachauswahl verhindern
      .AllowMultiSelect = False

      ' Dateifilter
      .Filters.Clear
      .Filters.Add "JPEG (*.jpg)", "*.jpg"
      .Filters.Add "Bitmap (*.bmp)", "*.bmp"
      .Filters.Add "All Files", "*.*"

      If .Show = True Then
         ' For Each ist hier eigentlich nur wichtig bei AllowMultiSelect = true (bei Mehrfachauswahl)
         For Each varFile In .SelectedItems
            ' Textfeld "Dateipfad" auf dem Formular leeren
            Me.Dateipfad.SetFocus
            Me.Dateipfad.Text = varFile
            ' Bildatei dem Bildobjekt zuordnen
            Me.picImage.Picture = varFile
         Next
      End If
   End With
End Sub

[MS Access] Formulardaten für eine parametrierte Abfrage nutzen

Im Beispiel wird z.B. angenommen, dass ein Formular “Adressen” existiert, in dem Datensätze, z.B. Adressdaten, angezeigt werden. Die dort verarbeitete Primärschlüsselspalte “ID” wird in der Abfrage genutzt, um bestimmte Kontakte, die mit dieser Adresse in Zusammenhang stehen, zu suchen.

Wichtig dabei ist das Schlüsselwort “Forms” vor dem Namen des verwendeten Formulars.

SELECT * FROM Kontakte WHERE Spalte LIKE Forms!Adressen!ID

[MS Access] Anzeige von Tabellenwerten in einem Listenfeld (anhand Fremdschlüssel-ID)

Ziel: Es soll anhand einer ID (t_groupID) eine Anzahl Datensätze aus einer Tabelle geholt und diese in einem Listenfeld (lf_users) dargestellt werden.

  1. Textfeld t_groupID mit ID-Verknüpfung auf dem Formular erstellen
  2. Listenfeld einfügen und Datensatzherkunft eintragen (Wert im Textfeld t_groupID nutzen)
  3. SELECT [user].[ID], [user].[Name], [user].[Vorname]
    WHERE (([user].[gruppen_ID]) LIKE "" & Forms!MeinFormular!t_groupID.Text & "")
    ORDER BY [user].[Name];
    
  4. Formular->Eigenschaften->Ereignis->Beim Anzeigen
  5. Private Sub Form_Current()
       t_GruppenID.SetFocus 'Focus muß gesetzt werden, da sonst Laufzeitfehler
       lf_users.Requery
    End Sub
    

ODER:

  1. Listenfeld einfügen und Datensatzherkunft (Tabelle/Abfrage) eintragen (Spalten-Wert “ID” aus dem akt. Datensatz im Formular nutzen)
  2. SELECT [user].[ID], [user].[Name], [user].[Vorname]
    WHERE (([user].[gruppen_ID]) LIKE "" & Forms!MeinFormular!ID & "")
    ORDER BY [user].[Name];
    
  3. Formular->Eigenschaften->Ereignis->beim Anzeigen
  4. Private Sub Form_Current()
       lf_users.Requery
    End Sub
    

[MS Access] Anzeige von Spaltenwerten in Textfeldern nach Selektion eines Datensatzes

Ziel: es soll auf einem Formular im Kombinationsfeld (k_username) ein Benutzername ausgewählt werden und dazu Adressdaten angezeigt werden

  1. Datensatzherkunft des Kombinationsfeldes k_username
  2. SELECT user.ID, user.name, user.strasse, user.telefon
    FROM users
    ORDER BY user.name;
    
  3. Gebundene Spalte: 1
  4. Spaltenanzahl: 4
  5. Spaltenbreiten: 0cm;2,542cm;0cm;0cm
  6. auf der Form nun entsprechende Bezeichnungsfelder für die anzuzeigenden Spaltenwerte einfügen (Name, Straße, Telefon)
  7. nun die Ereignisprozeduren (“Beim Anzeigen” und “Nach Aktualisierung”), welche die Spaltenwerte in die Bezeichnungsfelder schreiben, editieren
  8. ' Beim Anzeigen
    Private Sub Form_Current()
        If Not IsNull(Me!k_username) Or Not Me!k_username= "" Then
            bzf_username.Caption = Me![k_username].Column(2)
            bzf_strasse.Caption = Me![k_username].Column(3)
            bzf_telefon.Caption = Me![k_username].Column(5)
        Else
            bzf_username.Caption = ""
            bzf_strasse.Caption = ""
            bzf_telefon.Caption = ""
        End If
    End Sub
    
    ' Nach Aktualisierung
    Private Sub k_username_AfterUpdate()
        If Not IsNull(Me!k_username) Or Not Me!k_username= "" Then
            bzf_username.Caption = Me![k_username].Column(2)
            bzf_strasse.Caption = Me![k_username].Column(3)
            bzf_telefon.Caption = Me![k_username].Column(5)
        Else
            bzf_username.Caption = ""
            bzf_strasse.Caption = ""
            bzf_telefon.Caption = ""
        End If
    End Sub
    

[MS Access] Menüleisten aublenden

  • die Menüleisten können beim Start des Hauptformulars einfach ausgeblendet werden
  • dazu auf das Formular rechts klicken->Eigenschaften
  • im Eigenschaftsfenster in der Combobox oben “Formular” wählen
  • auf den Reiter “Ereignis” klicken
  • bei “Bei Laden” doppelklicken und unten stehenden Code eintragen
Private Sub Form_Load()
    CommandBars.ActiveMenuBar.Enabled = False
End Sub