ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 31.08.2000

Diese Seite wurde zuletzt aktualisiert am 31.08.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für IE, Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss der AVB-Web-Site zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

iGrafx und Inventarlisten in Excel

Zurück...


Anzeige

Micrografx - iGrafx

Micrografx/(-hg) mailto:hg_vbaigx@aboutvb.de

Mit iGrafx Professional haben Sie die Möglichkeit, einzelne Objekte mit diversen Daten zu hinterlegen. Mit Hilfe dieser Daten lassen sich dann beispielsweise auch Inventarlisten erstellen. Als einfachstes Beispiel wäre hier die Möglichkeit zu nennen, ein benutzerdefiniertes Feld für den Preis der jeweiligen Komponente hinzuzufügen. Nachdem benutzerdefinierte Felder global verteilt werden, stehen diese jedem Objekt innerhalb eines Charts zur Verfügung.

Die Werte dieser Datenfelder sollen nun ausgelesen und in Microsoft Excel exportiert werden. Anschließend soll dann in Excel noch die Summe der einzelnen Komponenten gebildet und die jeweilige ID der Objekte und der Objektname vermerkt werden. Damit ist es möglich, in Excel einzelne Objekte zu löschen, die dann analog dazu im iGrafx Professional Chart entfernt werden. Optional können Sie nach dem gleichen Prinzip auch eine Datenbank-Anbindung einrichten.

In der Visual Basic-Entwicklungsumgebung legen Sie zunächst ein neues Modul an. Dies hat den Sinn, dass auf die im Code enthaltenen Informationen aus verschiedenen Bereichen zugegriffen werden kann.

Zunächst müssen die einzelnen Variablen in dem Modul definiert werden. Die Variablen werden als Global definiert, da Sie so darauf auch aus Formularen zugreifen können.

Global iObj As Integer
Global iDef As Integer
Global iShapeObj As Integer
Global igxDocument As iGrafx3.Document
Global igxDiagram As Diagram
Global igxDataDef As CustomDataDefinitions
Global igxObjekt As DiagramObject
Global MyExcel As Excel.Application
Global ws As Excel.Worksheet

In dem Modul legen Sie nun eine Prozedur mit dem Namen "LeseDaten" an. Darin werden zunächst die einzelnen Objekte initialisiert. Dies erfolgt durch Zuweisung der entsprechenden Objekte an die Variablen per Set-Anweisung. Ferner wird Excel gestartet und dort ein Arbeitsblatt hinzugefügt.

Sub LeseDaten()
  Set igxDocument = Application.ActiveDocument
    Set igxDiagram = igxDocument.ActiveDiagram
    Set MyExcel = New Excel.Application
    MyExcel.Visible = True
    MyExcel.Workbooks.Add
    Set ws = MyExcel.ActiveSheet

Im nun folgenden Teil werden die Spaltenüberschriften in die Excel Tabelle eingefügt und entsprechend formatiert. Es werden hierbei die ID und der Name des Objektes eingetragen.

  ws.Range("A1") = "ID"
  ws.Range("B1") = "ObjectName"
  ws.Rows("1:1").Select
  MyExcel.Selection.Font.Bold = True

In der nun folgenden Schleife werden die Namen der benutzerdefinierten Felder ausgelesen und als Spaltenüberschrift in die Tabelle eingetragen. Es ist hierbei unerheblich, wie viele benutzerdefinierte Felder angelegt wurden, da aufgrund der Count-Eigenschaft alle etwaigen Einträge abgefragt werden.

  For iObj = 1 To igxDocument.CustomDataDefinitions.Count
    ws.Cells(1, iObj + 2) = _
     igxDocument.CustomDataDefinitions(iObj).Name
  Next

Nun werden noch die eigentlichen Daten der benutzerdefinierten Felder, die Objekt ID und der Shape Name ausgelesen und der entsprechenden Spalte in Excel zugewiesen. Auch hier werden wieder alle Objekte über eine Schleife über die Count-Eigenschaft abgefragt. Es werden aber lediglich Shapes als gültige Objekte zugelassen. Linien oder Zeichenobjekte werden somit nicht verarbeitet.

  For iObj = 1 To igxDiagram.DiagramObjects.Count
    Set igxObjekt = igxDiagram.DiagramObjects(iObj)
    ' Nur Shape-Objekte
    If igxObjekt.Type = ixObjectShape Then
      iShapeObj = iShapeObj + 1
      ws.Cells(2 + iObj, 1) = igxObjekt.ID
      ws.Cells(2 + iObj, 2) = igxObjekt.ObjectName
      For iDef = 1 To igxDocument.CustomDataDefinitions.Count
        ws.Cells(2 + iObj, 2 + iDef) = _
         igxObjekt.CustomDataValues.Item(1).Value
      Next
    End If
  Next

Zuletzt wird die Summe der eingetragenen Werte aus dem Feld Preis gebildet, die Spalte mit den Objekt Namen automatisch auf die optimale Breite eingestellt und die Zelle A1 aktiviert, so dass die Markierung aufgrund der "Autofit" Funktion nicht mehr erscheint.

  ws.Cells(iShapeObj + 4, 1) = "Summe"
  ws.Cells(iShapeObj + 4, 3).Select
  MyExcel.ActiveCell.FormulaR1C1 = _
   "=SUM(R[-" & iShapeObj + 1 & "]C:R[-2]C)"
  ws.Cells(1, 2).EntireColumn.AutoFit
  ws.Columns("A:A").Select
  MyExcel.Selection.HorizontalAlignment = xlLeft
  ws.Range("A1").Select
End Sub

In der zuletzt folgenden Prozedur namens "Start" wird das Formular UserForm1 durch die Methode SHOW aufgerufen. Das Formular wird im nächsten Abschnitt erstellt.

Sub Start()
  UserForm1.Show
End Sub

Fügen Sie ein neues UserForm ein. Platzieren Sie wie in der Abbildung zu sehen zwei Schaltflächen auf dem UserForm. Die Caption-Eigenschaften dieser Schaltflächen, sprich die Bezeichnung, können Sie frei wählen oder Sie übernehmen die Beschriftungen aus der Abbildung.

Nun muss noch das Formular mit Code hinterlegt werden. Bei einem Click-Ereignis auf die erste Schaltfläche soll die Subroutine "LeseDaten" ausgeführt werden. Da diese Routine in einem Modul steht, kann sie direkt ausgeführt werden.

Private Sub CommandButton1_Click()
  LeseDaten
End Sub

Bei einem Click Ereignis auf die zweite Schaltfläche sollen die zuvor in Excel markierten Objekte im Chart und in Excel entfernt werden. Dies wird mit zwei verschachtelten For-Next Schleifen erreicht. Hier wird der markierte Bereich (dies können auch mehrere unabhängige Zeilen sein) abgefragt und im Falle, dass es sich um Shapes handelt, im iGrafx Chart entfernt. Zuletzt werden die markierten Zeilen in Excel gelöscht.

Private Sub CommandButton2_Click()
  Dim r As Excel.Range
  Dim objID As Integer

  For Each r In MyExcel.Selection.Rows
    If Not IsNumeric(ws.Cells(r.Row, 1)) Then
      Exit For
    End If
    objID = ws.Cells(r.Row, 1)
    For Each igxObjekt In igxDiagram.DiagramObjects
      If igxObjekt.Type = ixObjectShape Then
        If igxObjekt.ID = objID Then
          igxObjekt.DeleteDiagramObject
        End if
      End If
    Next
  Next
  MyExcel.Selection.EntireRow.Delete
  ws.Cells(1, 1).Select
End Sub

Wenn Sie das Formular ausführen, erscheint das Formular in Ihrem Chart und Sie können die Objekte auslesen. Ferner wird automatisch ein Makro hinterlegt, das Sie über das Menü Extras - Visual Basic - Makros aufrufen können. Das Macro befindet sich in Document.Projects und trägt den Namen Module1.Start.


Modul und UserForm-Beispiel (excelinventar.zip - ca. 2,2 KB)


VBA & Micrografx iGrafx
VBA-Übersicht

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer