Autor |
Beitrag |
harmlos77
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 27.10.04 15:48
Ich möchte gerne folgende Formel an Excel übergeben:
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 Tino: Delphi-Tags hinzugefügt.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
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:
Delphi-Quelltext 1:
| WS.Cells.Range[zeile,spalte].Formula:='=L6-CountIF(C11:C41;"Urlaub")'; |
Gruß
Tino
|
|
harmlos77 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 27.10.04 17:45
Funktioniert es denn wenn du statt "CountIF" den Funktionnamen "ZÄHLENWENN" angibst?
|
|
harmlos77 
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 28.10.04 10:09
Tino hat folgendes geschrieben: | Funktioniert es denn wenn du statt "CountIF" den Funktionnamen "ZÄHLENWENN" angibst? |
Nein.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 28.10.04 20:14
Hallo,
meines Wissens nach müssen die per makro angebenen Befehle immer englisch sein.
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 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
harmlos77 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
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:
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)
|
|
|