Home

1 1 1 1 1 1 1 1 1 1 Rating 5.00 (3 Votes)

Nur für 32Bit Office Versionen

Dieser Workshop soll nur eine kurze Anleitung sein und Hinweise bei der Benutzung des Controls
unter MS-Access ab Version 2000 sein und ist bei weitem nicht vollständig.
Die Hinweise beziehen sich auf die Bsp-DB des beiliegenden Downloads. 

Einführung:

Das SGrid2-Control ist ein Datagrid von vbAccelerator

Eigentlich ist dieses Grid für VB5/6 geschrieben worden. Aber es kann auch unter MS-Access
eingesetzt werden. Und das möchte ich hier in diesem Workshop zeigen wie.

Jetzt wird sich mancher fragen, ja ein Datagrid na und, in Access habe ich doch das Listenfeld und
Unterformulare. Mit dem Control könnt Ihr aber Dinge darstellen das geht mit den herkömmlichen Möglichkeiten nicht.
Hier mal zur Einstimmung 2 Screenshots aus dem Downloadanhang.

 
 

 

Voraussetzungen:

Das Bsp ist unter A00-A07 lauffähig.

Das Control ("vbalSGrid6.ocx") selbst ist in der Setup-Datei enthalten.'
Genauere Infos und der Sourcecode des Controls findet Ihr auf der Homepage des Autors

Im Setup sind noch ein weiteres OCX und zwei DLL's enthalten
Die beiden DLL's (SSubTmr.dll und SSubTmr6.dll) sind für die Funktionalität
der Controls erforderlich und müssen auf dem Zielsystem registriert werden (übernimmt hier das Setup)

Dann kommt noch  vbAccelerator ImageList Control and Class v2.0 zum Einsatz.
Diese Imagelist hat ggü. der Imagelist von MS den Vorteil das man nachträglich
die Größe und Farbtiefe der Icons ändern kann.

Einfügen des Controls in ein Formular.
Formularentwurf
Menü -> Einfügen -> ActiveX-Steuerelement
In der Liste das Control auwählen (roter Rahmen) und OK klicken.
Der blaue Rahmen ist die Imagelist.
 
 
 
Setzen der Icons in der Imagelist
Aufruf:
 
 
 
Grundeinstellungen im 1. Register  sind Größe der Icons und deren Farbtiefe
 
 
 
Dann können im 2. Register die Icons hinzugefügt werden
 
 
 
Code Grundeinstellungen
Eigentlich wird das Grid genau wie jedes andere Control im Code angesprochen.
Nun hat aber Access die Eigenart von externen Controls die Eigenschaften und Methoden nich per
Intellisense anzuzeigen.
Das kann aber auch realisiert werden.
Im Modulkopf deklarieren wie eine Variable:
1
2
3
Option Compare Database
Option Explicit
Dim oSGrid As vbAcceleratorSGrid6.vbalGrid
Im Load Ereignis des Forms wird die Variable gesetzt und im Entladen wieder gelöscht.
1
2
3
4
5
6
Private Sub Form_Load()
    Set oSGrid = Me!vbalGrid1.Object
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set oSGrid = Nothing
End Sub
Danach kann dann auf die Intellisense-Funktion zugegriffen werden.
 
 
 
 
Alle Bsp-Codes beziehen sich auf die  Bsp-DB dieses Workshops
Kommen wir nun zum eigentlichen Füllen des Grids
Initialisierung des Grids
Als ersten müssen dem Grid ein paar Grundangaben mitgeteilt werden.
- Spalten und deren Eigenschaften
- Zuweisen der Imagelist
- allgemeine Einstellungen
Hier für nehmen wir eine Prozedur die 5 Spalten erstellt:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Private Sub InitialiseGrid()
    With oSGrid
        'Setzen der Zeilenhöhe
        .DefaultRowHeight = 30
        'Zuweisen das jede 2. Zeile eine andere Farbe hat
        .AlternateRowBackColor = RGB(252, 252, 230)
        'Zuweisen der Imagelist
        .ImageList = Me!vbalImageList1.hIml
        'Hinzufügen der Spaltenköpfe und deren Eigenschaften
        .AddColumn "ID", "ID", 0, , 50, True, , , , , , CCLSortNumeric
        .AddColumn "Artikel", "Artikel", 0, , 200, True, , , , , , CCLSortString
        .AddColumn "Lieferant", "Lieferant", 0, , 150, True, , , , , , CCLSortString
        .AddColumn "Katogrie", "Katogrie", 0, , 100, True, , , , , , CCLSortString
        .AddColumn "Einzelpreis", "Einzelpreis", ecgHdrTextALignRight, , 100, , , , , "#.00", , CCLSortNumeric
    End With
End Sub
Ich gehe nur kurz auf die wichtigsten Parameter der AddColumn-Methode ein
Genaueres im Objektkatalog.
1.  Parameter: Eindeutige Schlüsselfeldbezeichnung
2.  Parameter: Bezeichnung des Spaltenkopfs die im Grid erscheinen soll
3.  Parameter: Ausrichtung der Spaltenbezeichnung
5.  Parameter: Spaltenbreite
6.  Parameter: Spalte sichtbar
10. Parameter: Formatstring
12. Parameter: Feldtyp für die Sortierung
Jetzt würde das Ganze nach dem Aufruf der Prozedur "InitialiseGrid()" so aussehen.
 
 
 
Nun fehlen noch die Daten.
Auch hier kommt ein Prozedur zum Einsatz. Diese öffnet ein Recordset und damit werden
die Daten dem Grid hinzu gefügt.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub addData()
    Dim rss As DAO.Recordset
    Dim sSQL As String
    Dim lRow As Long
    Set rss = CurrentDb.OpenRecordset("qry_Artikel")
    rss.MoveLast
    lRow = rss.RecordCount
    rss.MoveFirst
    With oSGrid
        .Rows = lRow
        For lRow = 1 To .Rows
            .RowHeight(lRow) = 20
            .CellDetails lRow, 1, rss!Art_Nr, DT_RIGHT
            .CellDetails lRow, 2, rss!Artikelname
            .CellDetails lRow, 3, rss!Firma
            .CellDetails lRow, 4, rss!Kategoriename
            .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT
            rss.MoveNext
        Next lRow
    End With
    rss.Close
End Sub
Wenn Ihr dann alles in das Load-Ereignis packt sieht das Grid nach dem Öffnen so aus.
1
2
3
4
5
Private Sub Form_Load()
    Set oSGrid = Me.vbalGrid1.Object
    InitialiseGrid
    addData
End Sub
 
 
 
Aber das noch nicht ganz dass was wir wollen.
Also weiter.
Jetzt wollen wir aber das die einzelnen Felder nach bestimmten Kriterien formatiert
und Icons der entsprechenden Kategorie zugeordnet werden.
Dafür bohren wir die Prozedur "addData()" auf.
Setzen der Icons für die entsprechende Kategorie
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
If rss!Kategoriename = "Fleischprodukte" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 0
    ElseIf rss!Kategoriename = "Getreideprodukte" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 1
    ElseIf rss!Kategoriename = "Getränke" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 2
    ElseIf rss!Kategoriename = "Gewürze" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 3
    ElseIf rss!Kategoriename = "Meeresfrüchte" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 4
    ElseIf rss!Kategoriename = "Milchprodukte" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 5
    ElseIf rss!Kategoriename = "Naturprodukte" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 6
    ElseIf rss!Kategoriename = "Süßwaren" Then
        .CellDetails lRow, 4, rss!Kategoriename, , 7
 End If

Wobei hier zu beachten wäre das der Index der Icons aus der Imagelist, entgegen
der Anzeige im Imagelistcontrol, bei 0 beginnt.
Im nächsten Schritt wollen wir die Spalte mit dem Preis formatieren.
Folgende Kriterien habe ich mal genommen.
>100 Textfarbe Rot, Fett, Fontsize 14
>=20 und <100 Textfarbe Blau, Schrift normal
>=10 und <20 Textfarbe Schwarz, Zellhintergrund Gelb, Schrift normal
<10 Textfarbe Schwarz, Zellhintergrund Grün, Schrift normal
Zum Setzen der Fonts ist zusätzlicher Code erforderlich.
Für jede Änderung wäre eine neue Zuweisung der Variable "Fnt" erforderlich
bzw. zusätzliche Variablen.
1
2
3
4
5
6
7
Dim Fnt As Font
    Set Fnt = New StdFont
    With Fnt
        .Name = "Arial"
        .Bold = True
        .Size = 14
    End With
Jetzt noch die Farben. Wichtig ist hier das die Farben (Text und Hintergrund) als Hex-Werte
gesetzt werden müssen.
1
2
3
4
5
6
7
8
9
If rss!Einzelpreis >= 100 Then
        .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF, Fnt
    ElseIf rss!Einzelpreis >= 20 And rss!Einzelpreis < 100 Then
        .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &H80FFFF
    ElseIf rss!Einzelpreis >= 10 And rss!Einzelpreis < 20 Then
        .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF0000
    Else
        .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &HFF00&, &H0
End If
Somit sieht die komplettierte "addData()" Prozedur so aus:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Private Sub addData()
    Dim rss As DAO.Recordset
    Dim sSQL As String
    Dim lRow As Long, nRow As Long
    Dim Fnt As Font
    Set rss = CurrentDb.OpenRecordset("qry_Artikel")
    rss.MoveLast
    nRow = rss.RecordCount
    rss.MoveFirst
    Set Fnt = New StdFont
    With Fnt
        .Name = "Arial"
        .Bold = True
        .Size = 14
    End With
    With oSGrid
        .Rows = nRow
        For lRow = 1 To .Rows
            .RowHeight(lRow) = 20
            .CellDetails lRow, 1, rss!Art_Nr, DT_RIGHT
            .CellDetails lRow, 2, rss!Artikelname
            .CellDetails lRow, 3, rss!Firma
            If rss!Kategoriename = "Fleischprodukte" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 0
            ElseIf rss!Kategoriename = "Getreideprodukte" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 1
            ElseIf rss!Kategoriename = "Getränke" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 2
            ElseIf rss!Kategoriename = "Gewürze" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 3
            ElseIf rss!Kategoriename = "Meeresfrüchte" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 4
            ElseIf rss!Kategoriename = "Milchprodukte" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 5
            ElseIf rss!Kategoriename = "Naturprodukte" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 6
            ElseIf rss!Kategoriename = "Süßwaren" Then
                .CellDetails lRow, 4, rss!Kategoriename, , 7
            End If
            If rss!Einzelpreis >= 100 Then
                .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF, Fnt
            ElseIf rss!Einzelpreis >= 20 And rss!Einzelpreis < 100 Then
                .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &H80FFFF
            ElseIf rss!Einzelpreis >= 10 And rss!Einzelpreis < 20 Then
                .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF0000
            Else
                .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &HFF00&, &H0
            End If
            rss.MoveNext
        Next lRow
    End With
    rss.Close
End Sub
Und das ist das Ergebnis:
 
 
 
 
 
 
Kommen wir nun zu einigen zusätzlichen Möglichkeiten des Grids.
Auslesen eines Zellinhaltes auf den geklickt wurde
Hier kommt das Ereignis "SelectionChange" des Grids zum Einsatz.
1
2
3
4
5
Private Sub vbalGrid1_SelectionChange(ByVal lRow As Long, ByVal lCol As Long)
    With oSGrid
        MsgBox "Zeile: " & lRow & vbNewLine & "Spalte: " & lCol & vbNewLine & .CellText(lRow, lCol)
    End With
End Sub
Und das Ergebnis:
 
 
 
 
 
Grid Leeren
Zum Leeren gibt es die Methode Clear
1
oSGrid.Clear
Wobei die Clear-Methode noch ein zusätzlichen Parameter hat
Wird es so aufgerufen:
1
oSGrid.Clear True
Werden auch die Spaltenköpfe mit gelöscht.
 
Spalten aus- bzw. einblenden
Per VBA können Spalten zur Laufzeit aus- bzw. eingeblendet werden.
1
2
3
4
'Ausblenden der Spalte ID
oSGrid.ColumnVisible("ID") = False
'Einblenden der Spalte ID
oSGrid.ColumnVisible("ID") = True
Spalten gruppieren
Eine der besten Eigenschaften des Grids ist das Gruppieren von Daten.
Diese kann per VBA oder in den Eigenschaften des Grids eingestellt werden.
Per Code:
1
2
oSGrid.AllowGrouping = True
oSGrid.AllowGrouping = False
oder im Form:
 
 
 
Dort wird auch der Text festgelegt der im Kopfbereich erscheinen soll.
 
 
 
 
 
Dann kann mittels Drag 'n Drop eine Spalte in in diesen Bereich gezogen werden.
 
 
 
 
 
Im weiteren können auch weitere Spalten hinzu gefügt werden.
 
 
 
 
 
Das Ergebnis sähe dann so aus:
 
 
 
 
Auch ganze Spalten können mit Drag 'n Drop im Grid zur Laufzeit getauscht werden.
Alle Spalten behalten trotzdem den gleichen Spaltenindex.
Gruppierte Spalten alle ein- bzw. ausblenden
Es ist nun möglich per VBA alle gruppierten Ebenen ein- bzw auszublenden
Dafür sind 2 Prozeduren erforderlich die dann aufgerufen werden.
 
Einblenden:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Private Sub ExpandAllGroups()
Dim iRow As Long
   oSGrid.Redraw = False
   For iRow = 1 To oSGrid.Rows
      If (oSGrid.RowIsGroup(iRow)) Then
         oSGrid.RowGroupingState(iRow) = ecgExpanded
      End If
   Next iRow
   oSGrid.Redraw = True
End Sub
 
 
 
Ausblenden:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Private Sub CollapseAllGroups()
Dim iRow As Long
   oSGrid.Redraw = False
   For iRow = 1 To oSGrid.Rows
      If (oSGrid.RowIsGroup(iRow)) Then
         oSGrid.RowGroupingState(iRow) = ecgCollapsed
      End If
   Next iRow
   oSGrid.Redraw = True
End Sub

 
 
 
 
Dateien:
(1 Stimme)
Bsp-DB zum Workshop zur Benutzung SGrid2
Setup enthält folgende Dateien:

Workshop zur Benutzung SGrid2.pdf
tk_vbaac_Grid00.mdb
vbalSGrid6.ocx
vbalIml6.ocx
SSubTmr6.dll
SSubTmr.dll

Für MS-Access ab A00
Datum 05.02.2018
Dateigröße 1.92 MB
Download 1.415
 

Ähnliche Artikel

You have no rights to post comments

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Nur für 32Bit Office Versionen Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool...
1.png5.png7.png9.png5.png2.png7.png
Heute559
Gestern486
Diese Woche1876
Dieser Monat8150
Total1579527

  • IP: 3.80.144.110
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

2
Online

29. März 2024

Letzte Kommentare

  • Berechnen von Zeiträumen als Abfragekriterium

    elmard 02.02.2021 21:02
    1000 Dank
    für diese Datenbankanwendung! Eine sehr gute Umsetzung mit den vielen Möglichkeiten des Datums.

    Weiterlesen...

     
  • SQL zu VBA Konverter

    Tommy Admin 03.11.2019 16:33
    RE: SQL zu VBA Konverter
    Hallo Elmard, danke für die Info. :lol:

    Weiterlesen...

     
  • SQL zu VBA Konverter

    elmard 03.11.2019 14:49
    Bei SmartTools neue Version 4.0
    Dieses Tool liegt inzwischen in der Version 4 vor und läuft nun auch von A2013 und A2016 sowie im ...

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    TommyK 27.02.2019 06:52
    Workshop
    Hallo mpegjunkie, danke für Dein Feedback. Schön das Dir Workshop weiter hilft. :D

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    mpegjunkie 26.02.2019 20:10
    Perfekter Workshop
    Hallo Tommy, perfekter Workshop, toll und umfassend erläutert. Jetzt nutze ich diese Controls auch.

    Weiterlesen...