![]() |
Diagrammblatt im VBA erkennen
Hallo zusammen,
ich muss in einem Delphi-Programm mehrere Exceldateien durchgehen und dort Daten auslesen. Das habe ich auch schon hinbekommen. Leider haben manche Exceldateien auch einzelne Diagrammblätter. Wenn ich diese jetzt durchgehe und solche ein Diagrammblatt auftritt kommt es zu einem Fehler, dass das aktuelle Blatt keine Tabelle sei. Wie kann im VBA abfragen, was ich für ein Blatttyp habe (Tabelle oder Diagramm) ? Edit: In Excel unter VBA habe ich jetzt den Blatttyp mit dem Befehl "TypeName" herausbekommen. Nur leider habe ich noch keine Ahnung wie ich den Befehl in eine Delphi-Programm einbaue, damit ich dort das gleiche Ergebnis bekomme wie unter VBA in Excel. |
AW: Diagrammblatt im VBA erkennen
Über Workbook.Worksheets werden nur die Tabellen zurückgegeben. Über Workbook.Sheets alles.
Also so...
Delphi-Quellcode:
uses ... OleServer, Excel2000 ...;
: : var Excel:TExcelApplication; lcid, i:integer; Workbook:_Workbook; WorkSheet:OleVariant; begin Excel:=TExcelApplication.Create(Self); try lcid:=GetUserDefaultLCID; Excel.Connect; Excel.Visible[lcid] := true; Excel.UserControl:=true; Workbook:=Excel.Workbooks.Open( 'Mappe1.xls', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, lcid ); for i:=1 to Workbook.Worksheets.Count do begin WorkSheet:=Workbook.Worksheets[i]; Showmessage(WorkSheet.Name); end; finally Excel.Disconnect; Excel.free; end; end; |
AW: Diagrammblatt im VBA erkennen
Hallo Omata,
danke erstmal für Deine Antwort. Leider ist das noch nicht ganz, das was ich suche. Ich möchte den Typ des Tabellenblattes ermitteln, ob es jetzt eine reine Tabelle ist oder ob es ein Diagramm ist. Die Exceldatei öffne ich mit folgenden Quelltext :
Delphi-Quellcode:
Das Problem ist, dass wenn ich jetzt mit
// To open excel
try ExcelApp := GetActiveOleObject('Excel.Application'); except try // If no instance of Excel is running, try to Create a new Excel Object ExcelApp := CreateOleObject('Excel.Application'); except ShowMessage('Cannot start Excel/Excel not installed ?'); Exit; end; end; ExcelApp.Workbooks.Open('Mappe1.xlsx');
Delphi-Quellcode:
auf eine Zelle zugreifen will und das aufgerufene Tabellenblatt ist ein Diagramm, dann spuckt er mir einen Ole-Fehler aus. Diesen Fehler möchte ich umgehen und vorher den Typ des Tabellenblattes ermitteln.
ExcelApp.Cells[1, j].Value
|
AW: Diagrammblatt im VBA erkennen
ExcelApp.Cells[1, j].Value ist ja auch eine ungünstige Abkürzung, die auf das aktive Sheet im aktiven Workbook zugreift. Sauberer ist wie bei omata.
w:=ExcelApp.ActiveWorkbook s:=w.ActiveSheet if s.Typename = ??? then... oder als Einzeiler: if ExcelApp.ActiveWorkbook.ActiveSheet.Typename = ??? then ... |
AW: Diagrammblatt im VBA erkennen
Hallo zusammen,
danke für eure Antworten. Ich habe jetzt eine Lösung gefunden und in ![]() |
AW: Diagrammblatt im VBA erkennen
zur Info...
für den xxx.type gibt es unterschiedlich definierte Konstanten....
Code:
vielleicht sind die Konstanten ja auch in OleServer, Excel2000 etc definiert
xlChart > Diagrammblatt
xlChart4 > Excel 4-Diagramm xlChartShort > Excel 3-Diagramm xlInfo > Infofenster xlNoDocuments > keine geöffneten Dateien xlModule > VB Modul xlWorksheet > Tabellenblatt xlWorksheet4 > Excel 4-Tabellenblatt xlWorksheetShort > Excel 3-Tabellenblatt ![]() |
AW: Diagrammblatt im VBA erkennen
Hallo ibp,
danke für die Info. Werde ich noch zu dem Beitrag bei Code-Orakel hinzufügen. |
AW: Diagrammblatt im VBA erkennen
Im Code-Oracle vllt. noch
for K := 1 to ExcelApp.Sheets.Count do ersetzen durch for K := 1 to ExcelApp.ActiveWorkbook.Sheets.Count do ...und vllt. die Select-Zeile rauslassen, wenn nicht gerade die aktuelle Seite auch angezeigt werden soll, kostet nur performance. |
AW: Diagrammblatt im VBA erkennen
Danke für den Hinweis. Habe es auch schon in den Beitrag von Code-Orakel eingefügt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz