[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 

[MS Access] Formular maximiert anzeigen

  1. Datei -> Optionen -> Aktuelle Datenbank -> Formular anzeigen -> Namen auswählen
  2. Start-Formular öffnen -> Entwurfsmodus -> Eigenschaftsdatenblatt -> Auswahltyp: Formular
  3. Reiter “Andere”: PopUp auf “Ja”
  4. Ereignis: “Beim Öffnen” -> … -> Code-Generator
Private Sub Form_Open(Cancel As Integer) 
    ' Access-Hauptfenster maximieren 
    RunCommand acCmdAppMaximize 
    ' Startformular innerhalb des Access-Hauptfensters maximieren 
    DoCmd.Maximize 
End Sub

[MS Access] Externe Datei öffnen / ausführen

Private Sub btn_OpenFileClick() 
    ' Focus auf Textfeld mit Dateinamen setzen 
    Textfeld1.SetFocus 
    ' Shell-Objekt erzeugen 
    Dim objShell 
    Set objShell = CreateObject("shell.application") 
    ' Datei maximized öffnen, Dateiname steht in Textfeld1.Text 
    objShell.ShellExecute Textfeld1.Text, "", "", "open", 3 
    ' Shell-Objekt wieder zerstören 
    Set objShell = Nothing 
End Sub