![]() |
Problem beim Verwenden von Excel
Hallo zusammen.
Ich bin gerade dabei ein Programm zu schreiben, das automatisch Resultate eines Sport-Turniers an meiner Schule in eine Excel-Tabelle einträgt. Da das Programm bereits ziemlich lang ist, poste ich nur den Teil, in dem vermutlich der Fehler liegen sollte:
Delphi-Quellcode:
Nachdem ich ein Objekt in der ComboBox3 ausgewählt habe, bekomme ich die Fehlermeldung:
var
Form1: TForm1; excel: variant; index7,index6:array[1..7] of integer; index5:array[1..6] of integer; index:integer; procedure TForm1.FormCreate(Sender: TObject); begin initiateindexes; excel:=CreateOleObject('Excel.Application'); Excel.Workbooks.Open('G:\....xlsx'); fillcombo1; end; procedure TForm1.ComboBox3Change(Sender: TObject); var i,j:integer; begin ComboBox4.Clear; j:=StrToInt(copy(ComboBox3.Items[ComboBox3.ItemIndex],2,1)); //Bestimmung der Klasse inngerhalb eines Jahrganges, dient zur Orientierung in der Mappe case StrToInt(copy(ComboBox3.Items[ComboBox3.ItemIndex],1,1)) of //Unterscheidet die Jahrgänge 7: begin i:=0; Excel.ActiveWorkbook.Sheets['7eme'].Select; index:=index7[j]; while Excel.Cells[(index+i),2].Value <> '' do begin ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value);//die beiden Zellen-Werte sind Name und Vorname alle Mitschüler einer Klasse inc(i); end; end; 6:... 5:... end; 'exception class EVariantError with message: 'Invalid variant type conversion' Wenn ich dann wieder F9 drücke, kann ich das Programm weiterbenutzen, und in der ComboBox4 befinden sich die korrekten Objekte. Falls ich dann aber wieder was in der ComboBox3 ändere, geht der Spaß wieder von vorne los. Ich habe auch schon versucht das '.Value' wegzulassen, da ich auch mehrmals den Befehl Excel.Cells[..,..] im Internet ohne das .Value gesehen habe, dies hat jedoch nichts erbracht. Es wäre sehr nett wenn mir jemand helfen könnte, da ich noch viel zu tun habe, wenig erfahren bin, und unter zeitdruck stehe. |
AW: Problem beim Verwenden von Excel
Statt ComboBox3.Items[ComboBox3.ItemIndex] könnte man auch einfach ComboBox3.text nehmen. Ist aber nicht der Fehler, denke ich.
Ob mit oder ohne .Value sollte normalerweise egal sein, da das auch die Standard Eigenschaft einer Zelle ist. Ich würde mir mal einen Haltepunkt in die Funktion setzen und sehen, an welcher Codezeile genau der Fehler kommt. |
AW: Problem beim Verwenden von Excel
Hallo,
benutze lieber Range statt Cells. Hier noch ein Link: ![]() Heiko |
AW: Problem beim Verwenden von Excel
Wie gesagt, ich hab es auch schon mit und ohne .Value versucht und weder noch hat mir zum Erfolg verholfen.
Ich war bestimmt schon 2 Stunden damit beschäftigt Teile in {} zu setzen oder SendMessage(' ') an mehreren Stellen einzubauen, komischerweiser bekomme ich jedoch immer eine Fehlermeldung. Danke für den Tip mit Range, aber da ich nun schon recht viel geschrieben habe, ändere ich dies nun nicht mehr, da es sofern ich es richtig verstehe "nur" zur Esthetik beiträgt. Ich verhalt's mir für's nächste Mal. Hat sonst wer eine Idee woran es liegen könnte? |
AW: Problem beim Verwenden von Excel
Zitat:
|
AW: Problem beim Verwenden von Excel
Ich dachte er hätte mit seinem Vorschlag eine ähnliche Methode wie die von mir aufgezählten gemeint (zB an bestimmten Stellen SendMessage('') einbauen). Was eine Haltestelle ist, ist mir unbekannt.
Jedoch habe ich wie von dir erwähnt mich mit F7 durchgeklickt, und die Fehlermeldung kam, nach mehrfachem Durchgehen bei:
Delphi-Quellcode:
Kann es sein, dass die Schleife klappt, wenn die Zelle einen Inhalt hat, jedoch nicht klappt wenn sie keinen Inhalt hat? Dies scheint mir nämlich bezüglich des Ergebnises der Fehlersuche mit F7 am sinnvollsten. Wenn ja, wie kann ich dieses Problem umgehen?
while Excel.Cells[(index+i),2].Value <> '' do
|
AW: Problem beim Verwenden von Excel
Hallo diavy,
Delphi-Quellcode:
es ist zu beachten, dass die Excel-Cells –Index bei 1 anfängt. Ist sichergestellt das (index+i) min. 1 ist?
Excel.Cells[(index+i),2].Value
Bis bald Chemiker |
AW: Problem beim Verwenden von Excel
Hallo!
Ja, der geringstmöglichste index-Wert beträgt 6. Edit: Ich glaube ![]() |
AW: Problem beim Verwenden von Excel
Versuch mal das:
Delphi-Quellcode:
while (NOT Empty(Excel.Cells[(index+i),2])) do
begin ... end; function Empty(const s: String): Boolean; // Überprüfen, ob ein String leer ist: begin // Siehe hier: // http://www.delphipraxis.net/169312-wie-string-auf-leer-pruefen.html#post1174321 Result := Trim(s) = ''; end; |
AW: Problem beim Verwenden von Excel
Hallo,
Zitat:
Delphi-Quellcode:
EmptyParam ist ein "leerer" Variant, gfls. musst du noch die Unit Variants in die Uses-Klausel aufnehmen.
while Excel.Cells[(index+i),2].Value <> EmptyParam do
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 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