Autor Beitrag
harmlos77
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 27.10.04 15:48 
Ich möchte gerne folgende Formel an Excel übergeben:
ausblenden Delphi-Quelltext
1:
WS.Cells.Range[zeile,spalte].Formula:='=L6-CountIF'C11:C41;"Urlaub"')';					

Leider bekomme ich einen OLE Fehler. "SUM" geht ohne Probleme, jedoch weder "WENN" noch "ZähleWenn" kann ich an Excel weitergeben. Worin liegt mein Denkfehler und woher bekomme ich eine Liste mit den Notationen für die Befehle?

Danke

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 27.10.04 17:23 
Hallo!

Also ich habe Excel nicht installiert aber ich denke mir das die Formel nicht korrekt ist. Versuche doch mal in Excel direkt den Wert einzufügen:
ausblenden Quelltext
1:
=L6-CountIF'C11:C41;"Urlaub"')					

Jedenfalls macht aus meiner Sicht der Aufbau dieser Formel keinen Sinn.

Da ich die Funktion CountIF und den Sinn deiner Formel nicht kenne kann ich nur vermuten wie es richtig sein könnte:
ausblenden Delphi-Quelltext
1:
WS.Cells.Range[zeile,spalte].Formula:='=L6-CountIF(C11:C41;"Urlaub")';					


Gruß
Tino
harmlos77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 27.10.04 17:42 
Die Formel lautet im Excel Original: =L6-(ZÄHLENWENN(C11:C41;"Urlaub"))
Dort funktioniert Sie auch. Ich hatte in meinem Code die Klammern vergessen. Also jetzt noch einmal richtig:

WS.Cells.Range[zeile+4,5].Formula:='=L6-(CountIF(C11:C41;"Urlaub"))';
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 27.10.04 17:45 
Funktioniert es denn wenn du statt "CountIF" den Funktionnamen "ZÄHLENWENN" angibst?
harmlos77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 28.10.04 10:09 
Tino hat folgendes geschrieben:
Funktioniert es denn wenn du statt "CountIF" den Funktionnamen "ZÄHLENWENN" angibst?


Nein.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 28.10.04 20:14 
Hallo,

meines Wissens nach müssen die per makro angebenen Befehle immer englisch sein.

ausblenden Delphi-Quelltext
1:
WS.Cells.Range[zeile+4,5].Formula:='=L6-(CountIF(C11:C41 , "Urlaub"))';					

probiers mal bei countif mit einem Komma statt semikolon.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
harmlos77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 29.10.04 10:02 
Alles im String besteht aus Semikolon, weil Excel sonst damit nichts anfangen kann. Habe es mit Komma ausprobiert, ohne Erfolg.

Das die Formeln in Englisch übergeben werden müssen, ist mir auch klar. Deshalb fragte ich nach der Notation (Übersetzungstabelle).

Ich habe 2 mal geschrieben, da sich leider nur einer meldete, der zwar anscheinend Ahnung hatte, jedoch kein Excel.
Die Übergabe funktioniert in C++ fehlerfrei.

Ich bin der Meinung, es fehlen eine oder zwei Befehlskette vorher, die irgend etwas ein/aus schalten.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 29.10.04 22:20 
verwendest du die Serverkomponenten , oder wie greifst du auf Excel zu?
harmlos77 hat folgendes geschrieben:
Alles im String besteht aus Semikolon, weil Excel sonst damit nichts anfangen kann. Habe es mit Komma ausprobiert, ohne Erfolg.

nein, das Semikolon ist dann im excel auch so drin, auch wird die Formel deutsch geschrieben. Aber die Paramter mußt du in deinem code trotzdem per Komma trennen. Was mir aber noch komisch vorkommt, ist deine Range-Angabe. Dort werden doch aber Zellangeben erwartet, oder etwa nicht?
Probier testweise erstmal eine Formel in die activecell zu setzen oder nimm eine range wie z.b. ['A1','A1']. Du übergibst nur als 1. Zelle Zeile und als 2. Zelle Spalte, das wird wohl so nicht klappen.

Zitat:

Das die Formeln in Englisch übergeben werden müssen, ist mir auch klar. Deshalb fragte ich nach der Notation (Übersetzungstabelle).

Ich bin der meinung, irgendwo in der excel-VB hilfe gibt es einen unterpunkt, der sich mit den Makrobefehlen auseinandersetzt.

Zitat:

Ich habe 2 mal geschrieben, da sich leider nur einer meldete, der zwar anscheinend Ahnung hatte, jedoch kein Excel.

soll schon mal vorkommen, das Beiträge nicht innerhalb von 5 Minuten beantwortet werden :roll:

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
harmlos77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 31.10.04 21:02 
Hallo Frank,

Danke für Deine Mühen im Vorraus.

Ich nutze die Standard Serverkomponenten (ExcelXP.PAS bzw. Excel2000.PAS). Welche ich eintrage, macht keinen Unterschied.

Setze ich ein Komma anstatt des Semikolon, wird ein Komma auch übergeben und Excel gibt mir einen Formelfehler. Übergebe ich Formeln in deutsch, kann Excel auch damit nichts anfangen. Ich müsste erst einmal die Zeile als aktiv markieren und ein Zeilenumbruch (Enter) durchführen, damit Excel es als Formel erkennt. Also ist Englisch schon richtig.

Im Range übergebe ich bei Range zeile=Zahl, spalte=Zahl. So ist zum Beispiel Range=1,1. Funktioniert ja auch mit allem Fehlerfrei (Formatierung, Text, Formel mit dem Befehl SUM). Habe auch schon mit Cells gearbeitet, jedoch auch ohne Erfolg.

In der Excel VB bin ich fündig geworden. Danke. Befehl lautet auch "CountIF". Was mich nur wundert ist folgendes:

a) Übergabe mit SUM -> funktioniert und rechnet
b) Übergabe mit SUMME -> funkioniert und rechnet nicht (klar, weil falsche Syntax)
c) Übergabe mit COUNTIF -> OLE Fehler
d) Übergabe mit ZÄHLEWENN -> OLE Fehler

Theoretisch müsste Fall d auch funkionieren (da Syntax falsch und Excel es als "Text" interpretieren müsste wie im Fall b).

Die Zelle als aktiv markieren hat leider auch nichts gebracht.

Ich hatte inzwischen mit einem Programmierer aus der alten Firma Kontakt. Er bestätigte, daß er den selben Fehler bereits auch schon hatte. Er behalf sich damit, eine Vorlage zu laden, die die Formeln bereits beinhaltete. Jedoch sind meine Mappen dynamisch, also ist eine Vorlage nicht anwendbar. Er bestätigte ebenfalls meine Vermutung, das irgend ein Schalter vorher gesetzt werden muss. Er erinnert sich nur noch daran, das es 2 Schalter sein müssen. Jedoch findet er den Code nicht mehr. Google und Co haben leider nichts gebracht.

Vielleicht hast Du noch eine Idee oder Rat.

Jörg
harmlos77 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mo 01.11.04 16:01 
Hallo Frank,

habe die Lösung (2 Fehler kombiniert):

1. Bei der Angabe der Position war zeile und spalte wirklich nur eine Zahl. Habe dieses abgeändert. Und es funktionierte immer noch nicht, weil

2. es wirklich Komma anstatt Semikolon sein muss.

Es funktionierte [5,6] Problemlos, jedoch entspricht es nicht der "Regel". Deshalb hat der Versuch mit dem Komma ebenfalls nicht funkioniert.

Also Problem behoben und wieder etwas dazugelernt.

Danke für die Anregungen.

Jörg
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 01.11.04 22:02 
Hallo nochmal, deine Range-angabe hat mich ja schon gestört, heut mittag ist es mir wieder eingefallen:
in VBschreibst du vielleicht
ausblenden Quelltext
1:
Cells[2,1].Formula:='=L6-(CountIF(C11:C41 , "Urlaub"))'					

in delphi gibt es bei den serverkompos keine default-property, die cells[2,1] erlaubt, das wird meist mit der item-eigenschaft erledigt, also:
ausblenden Delphi-Quelltext
1:
ExcelWorksheet1.Cells.Item[Zeile,Spalte].Formula:='=L6-(CountIF(C11:C41 , "Urlaub"))';					

diese Item-eigenschaft findest du sehr oft, und wenn du die Serverkompos verwendest, ist es mit Hilfe der Code-vervollständigung auch schnell rauszufinden, wo es diese Eigenschaft gibt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)