AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Diagrammblatt im VBA erkennen

Ein Thema von RWarnecke · begonnen am 29. Mär 2012 · letzter Beitrag vom 30. Mär 2012
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Diagrammblatt im VBA erkennen

  Alt 29. Mär 2012, 10:27
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.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (29. Mär 2012 um 11:13 Uhr)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Diagrammblatt im VBA erkennen

  Alt 29. Mär 2012, 23:50
Ü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;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 07:32
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:
  // 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');
Das Problem ist, dass wenn ich jetzt mit ExcelApp.Cells[1, j].Value 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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 07:57
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 ...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 08:27
Hallo zusammen,

danke für eure Antworten. Ich habe jetzt eine Lösung gefunden und in Code-Orakel Online reingestellt. Diese Lösung reicht erstmal für meine belange.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 09:18
zur Info...

für den xxx.type gibt es unterschiedlich definierte Konstanten....
Code:
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
vielleicht sind die Konstanten ja auch in OleServer, Excel2000 etc definiert


Link hier sind weitere Konstanten mit Werten

Geändert von ibp (30. Mär 2012 um 09:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 09:28
Hallo ibp,

danke für die Info. Werde ich noch zu dem Beitrag bei Code-Orakel hinzufügen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 10:32
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: Diagrammblatt im VBA erkennen

  Alt 30. Mär 2012, 10:56
Danke für den Hinweis. Habe es auch schon in den Beitrag von Code-Orakel eingefügt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz