[MS Access] Binärdaten aus einer Datei lesen

' https://stackoverflow.com/questions/660312/how-can-i-read-a-binary-file-using-vba
Sub BtnReadBinaryClick()
    ' Dateipfad + Dateiname
    Dim sFile As String
    sFile = "c:\\temp\\test.bin"
   
    ' Array für Binärdaten
    Dim byaFileData() As Byte
   
    ' Dateizeiger
    Dim fd As Integer
    ' nächsten freien Dateizeiger holen
    fd = FreeFile

    ' Datei zum binären Lesen öffnen
    Open sFile For Binary Access Read As #fd
    ' Array an Dateigröße anpassen
    ReDim byaFileData(0 To LOF(fd) - 1)
    ' Datei in Array einlesen
    Get #fd, , byaFileData
   
    ' hier byaFileData bearbeiten
    ...
   
    ' Datei schließen
    Close #fd
End Sub

[MS Access] Felder mit Fremdschlüsselbeziehungen im Klartext als Auswahlfeld (Combobox) darstellen

  • Tabelle -> Entwurfsansicht
  • Felddatentyp wählen, für den die Combobox zur Auswahl eingeblendet werden soll
  • unten im Fenster “Feldeigenschaften” -> Reiter “Nachschlagen”
  • Datensatzherkunft …
  • Tabelle(n) einblenden und gewünschte Anzeigespalten für die Combobox auswählen + als LETZTES die Schlüsselspalte!
  • Abfrage speichern unter …
  • Abfrage schließen
  • Datensatzherkunft: gespeicherte Abfrage eintragen
  • Gebundene Spalte: Nr. der Schlüsselspalte
  • Spaltenzahl: Anz. Anzeigespalten für die Combobox
  • Spaltenbreiten: 3cm;4cm;… (Breiten für die einzelnen Anzeigespalten für die Combobox)
  • Listenbreite: Gesamtbreite (Summe) der Spalten
  • Mehrere Werte zulassen: nein (wenn jemals auf “ja”, dann nur rückgängig machbar wenn komplette Spalte gelöscht)
  • Speichern

[MS Access] Anzeigen und Editieren von Tabellen mit Hilfe von Unterformularen

  • Entwurf -> Unterformular-Element in Formular ziehen
  • Im Assistenten alle relevanten Spalten der verknüpften Tabellen einfügen, es muss eine Spalte vorhanden sein, die eine Beziehung zum akt. Datensatz des Elternformulars hat
  • Auswahltyp “Unterformular/-bericht” -> im Entwurfsmodus mit der Maus knapp links neben das Unterformular klicken, sodass ein Auswahlrahmen um das Unterformular entsteht sowie ein großes schwarzes Auswahlkästchen an der linken oberen Ecke zu sehen ist
  • Reiter Daten:
    Herkunftsobjekt: “Name-Unterformular”
    Verknüpfen nach: Spalte im Elternformular
    Verknüpfen von: Spalte im Unterformular
  • Auswahltyp “Formular” -> im Entwurfsmodus mit der Maus in die linke obere Ecke des Unterformulare klicken, sodass ein kleines schwarzes Kästchen innerhalb der linken oberen Ecke entsteht
  • Reiter Format:
    Standardansicht: Datenblatt
    Formularansicht zulassen: nein
    PivotTable-Ansicht zulassen: nein
    PivotChart-Ansicht zulassen: nein
    Layoutansicht zulassen: nein
  • Reiter Daten:
    Datensatzquelle: SELECT -> kann angepasst werden, Achtung: Evtl werden, wenn die Spalten-Verknüpfungen zum Datensatz des Elternformulars fehlen, die Einstellungen unter 3.1. zurückgesetzt
    Dateneingabe, Anfügen, Löschen, Bearbeiten, Filtern von Daten kann eingestellt werden
  • Anzeigeeinstellungen in der Formularansicht
  • Spalten können in der Formularansicht des Elternformulars ein- und ausgeblendet sowie sortiert werden, diese Einstellungen können auch abgespeichert werden

[MS Access] Per Buttonklick zu bestimmten Datensatz springen

Variante 1

' Button auf Formular 
' Ereignis: Beim Klicken -> Makro-Generator (Eingebettetes Makro) 
' Makro: SuchenNachDatensatz 
' Aufnahme: Erster 
' Bedingung: ="[FeldName] = " & Str(Nz([TextFeld.Text];0)) 

Variante 2

Private Sub btnSearch_Click() 
    TextFeld1.SetFocus 
    ' Stringwert suchen, daher die '' 
    Me.Recordset.FindFirst "[TextSpalte] = '" & TextFeld1.Text & "'" 
End Sub 

Variante 3

Private Sub btnSearch_Click() 
    TextFeld1.SetFocus 
    ' mit RecordsetClone suchen 
    ' Stringwert suchen, daher die '' 
    Me.RecordsetClone.FindFirst "[TextSpalte] = '" & TextFeld1.Text & "'" 
    ' Datensatzzeiger vom Recordset anpassen 
    Me.Recordset.Bookmark = Me.RecordsetClone.Bookmark
End Sub

[MS Access] Inhalt eines Listenfeldes in einem CSV-String erfassen

' beinhaltet alle Zeilen des Listenfeldes mit CRLF getrennt 
Dim sAllRows As String 
' eine Zeile, Spalten durch Tab getrennt 
Dim sSingleRow As String 

Listenfeld1.SetFocus 

' Ab Zeile 1, da 0 = Spaltenüberschriften 
For row = 1 To Listenfeld1.ListCount - 1 
    sSingleRow = "" 
    
    ' alle Spalten 
    For col = 0 To Listenfeld1.ColumnCount - 1 
        If sSingleRow = "" Then 
            sSingleRow = Listenfeld1.Column(col, row) 
        Else 
            ' Spalten durch Tab trennen 
            sSingleRow = sSingleRow & vbTab & Listenfeld1.Column(col, row) 
        End If 
    Next col 
    
    If sAllRows = "" Then 
        sAllRows = sSingleRow 
    Else 
        ' Zeilen durch CRLF trennen 
        sAllRows = sAllRows & vbNewLine & sSingleRow 
    End If 
Next row

[MS Access] String in die Zwischenablage kopieren

' Aufruf: CopyToClipBoard ("Text für Zwischenablage")
' in ein neues Modul einfügen:

Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long 
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long 
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long 
Declare Function CloseClipboard Lib "User32" () As Long 
Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long 
Declare Function EmptyClipboard Lib "User32" () As Long 
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long 
Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As Long 

Public Const GHND = &H42 
Public Const CF_TEXT = 1 
Public Const MAXSIZE = 4096 

Function CopyToClipBoard(TextToCopy As String) 
   Dim hGlobalMemory As Long
   Dim lpGlobalMemory As Long 
   Dim hClipMemory As Long
   Dim X As Long 

   ' Globalen Speicher reservieren 
   hGlobalMemory = GlobalAlloc(GHND, Len(TextToCopy) + 1) 
   lpGlobalMemory = GlobalLock(hGlobalMemory) 

   ' String in Speicherbereich kopieren 
   lpGlobalMemory = lstrcpy(lpGlobalMemory, TextToCopy) 

   ' Speicherbereich freigeben 
   If GlobalUnlock(hGlobalMemory) <> 0 Then 
      MsgBox "Speicher konnte nicht freigegeben werden." 
   Else 
       ' Zwischenablage öffnen 
       If OpenClipboard(0&) = 0 Then 
          MsgBox "Zwischenablage konnte nicht geöffnet werden." 
          Exit Function 
       End If 
    
       ' Zwischenablage leeren 
       X = EmptyClipboard() 
    
       ' Daten in die Zwischenablage kopieren 
       hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) 
   End If 

   If CloseClipboard() = 0 Then 
      MsgBox "Zwischenablage konnte nicht geschlossen werden." 
   End If 
End Function 

[MS Access] Listenfeld – Einen Eintrag in die Zwischenablage kopieren

' Listenfeld1 - Listenfeld mit Inhalt 
' txtHidden - Verstecktes Hilfsfeld auf dem Formular für Text zum kopieren 

Private Sub btnCopy_Click() 
    Listenfeld1.SetFocus 
    
    ' Wert aus Spalte 1 [0..n] holen und an verstecktes Textfeld übergeben 
    txtHidden = Listenfeld1.Column(1) 
    txtHidden.SetFocus
    
    ' Inhalt des versteckten Feldes selektieren 
    txtHidden.SelStart = 0 
    txtHidden.SelLength = Len(txtHidden) 
    
    ' Inhalt in die Zwischenablage kopieren 
    DoCmd.RunCommand acCmdCopy 
End Sub