Tipp 0303 MSHFlexGrid-Daten in Excel-Tabelle einfügen
Autor/Einsender:
Datum:
  Angie
27.05.2006 (Update)
Entwicklungsumgebung:   VB 5
Dieses Beispiel zeigt eine der verschiedenen Möglichkeiten, den Inhalt eines MSHFlexGrid-Steuerelements in einer Excel-Tabelle einzufügen. Hier werden die Daten zunächst in einem Datenfeld zwischengespeichert, die Größe des Bereichs in Excel entsprechend der Anzahl der Zeilen und Spalten im Grid angepasst und dann eingefügt. Anschließend werden in der Excel-Tabelle noch ein paar Formatierungen vorgenommen, hier sind der Fantasie fast (!) keine Grenzen gesetzt.
Anmerkung: Die Objektvariable für die neu erstellte Excel-Arbeitsmappe wurde hier mit dem Schlüsselwort WithEvents deklariert und das BeforeClose-Ereignis des Workbook-Objekts hinzugefügt. Das BeforeClose-Ereignis wurde so ergänzt, dass der Anwender die Arbeitsmappe nur über die VB-Anwendung schließen kann, also nicht in Excel selbst. Der Code im Download-Beispiel ist ausführlich kommentiert.
 
Option Explicit

Private WithEvents mevt_Workbook As Excel.Workbook
Private m_objXLApp As Excel.Application

Private Sub cmdGridToXL_Click()
  Dim objXLWks  As Excel.Worksheet

  Dim varData() As Variant

  Dim nRows As Long
  Dim nCols As Long

  Dim r As Long
  Dim c As Long

  Me.cmdGridToXL.Enabled = False

  With MSHFlexGrid1
    nRows = .Rows - 1
    nCols = .Cols - 1

    ReDim varData(nRows, nCols)

    For r = 0 To nRows
      For c = 0 To nCols
        varData(r, c) = .TextMatrix(r, c)
      Next c
    Next r
  End With

  Set m_objXLApp = CreateObject("Excel.Application")
  Set mevt_Workbook = m_objXLApp.Workbooks.Add(-4167)

  Set objXLWks = mevt_Workbook.Worksheets(1)
  objXLWks.Name = "MSHFlexGrid-Daten"

  nRows = nRows + 1
  nCols = nCols + 1

  objXLWks.Range("A1").Resize(nRows, nCols).Value = varData
  Erase varData

  With objXLWks.Range( _
        objXLWks.Cells(1, 2), objXLWks.Cells(1, nCols))
    .Font.Bold = True
    .Interior.ColorIndex = 36
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .EntireRow.RowHeight = 20
  End With

  With objXLWks.Range( _
        objXLWks.Cells(2, 1), objXLWks.Cells(nRows, 1))
    .Font.Bold = True
    .Interior.ColorIndex = 35
  End With

  With objXLWks.Range(objXLWks.Cells(1, 1), _
        objXLWks.Cells(nRows, nCols)).Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  Set objXLWks = Nothing

  m_objXLApp.Visible = True
End Sub

Private Sub mevt_Workbook_BeforeClose(Cancel As Boolean)
  Cancel = True
  MsgBox "Sorry... die Arbeitsmappe " & mevt_Workbook.Name & _
       vbLf & "' kann nur über den Button <Beenden> im " & _
       vbLf & "VB-Programm geschlossen werden.", _
       vbOKOnly + vbInformation + vbSystemModal, _
       Title:=Me.Caption
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, _
      UnloadMode As Integer)

  On Error Resume Next
  m_objXLApp.EnableEvents = False
  mevt_Workbook.Close Savechanges:=False
  m_objXLApp.EnableEvents = True
  Set mevt_Workbook = Nothing

  m_objXLApp.Quit
  Set m_objXLApp = Nothing
End Sub
 
Weitere Links zum Thema
Automation mit Office-Anwendungen
Excel-Automatisierungsfehler vermeiden
Excel-Ereignisse des Workbook-Objekts
Excel-Ereignisse des Worksheet-Objekts
Excel-Tabellen mit VB bearbeiten
MSHFlexGrid - Daten aus Textdatei einlesen und speichern
Hinweis
Um diesen Tipp ausführen zu können, muss das Microsoft Hierarchical FlexGrid Control als Komponente und die Microsoft Excel x.0 Object Library in das VB-/VBA-Projekt eingebunden werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (5,3 kB) Downloads bisher: [ 2337 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 28. Mai 2011