| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Excel: Formula - FormulaLocal (3986 mal gelesen)
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 26. Sep. 2012 12:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem beim Schreiben einer Exceltabelle im Zusammenhang mit Formeln: Vom Prinzip möchte ich die englischen Formeln schreiben und verwende daher "Formula", bei deutschen Formeln würde ich "FormulaLocal" verwenden. Problem: in einer VBA-Sub "Test" in einer Exceldatei funktioniert es einwandfrei:
Code:
Sub test() Dim sRangeName, sLanguageText, rw Range("D4").Formula = "=sum(B4:C4)" Range("D5").FormulaLocal = "=summe(B5:C5)" MsgBox "Deutsch geschrieben und das ist die englische Formel: " & Range("D5").Formula MsgBox "Englisch geschrieben und das ist die deutsche Formel: " & Range("D4").FormulaLocalEnd Sub
Wenn ich dasselbe Ergebnis in LISP erzielen möchte, dann funktioniert das nicht mit der englischen Formel, obwohl ich der Meinung bin, daß ich prinzipiell alles genauso gemacht habe wie in VBA:
Code:
(defun c:test( / CELLS DATEIPFAD ERROR EXCEL SHEET SHEETS WORKBOOK) (setq dateipfad "C:\\temp\\Formula-FormulaLocal-LSP-VBA.xlsm") (if(and (findfile dateipfad) (setq Excel (vlax-get-or-create-object "Excel.Application")) (if(setq error(vl-catch-all-error-p (setq Workbook (vl-catch-all-apply 'JB_test:Excel:Open (list dateipfad excel))))) (alert (strcat "Die Datei oder eine gleichnamige ist bereits in Excel geöffnet," " bitte schließen und nochmal.")) 'T) (setq Sheets (vlax-get-property Workbook 'Sheets)) (setq Sheet(vlax-get-property Sheets 'Item "Tabelle1")) (setq Cells (vlax-get-property Sheet 'Cells))) (progn (vlax-put-property (vlax-get-property Cells 'Range "E4")'Formula "=sum(B4:C4)") (vlax-put-property (vlax-get-property Cells 'Range "E5")'FormulaLocal "=summe(B5:C5)") (alert (strcat "Deutsch geschrieben und das ist die englische Formel: " (vlax-variant-value (vlax-get-property (vlax-get-property Cells 'Range "E5")'Formula)))) (alert (strcat "Englisch geschrieben und das ist die deutsche Formel: " (vlax-variant-value (vlax-get-property (vlax-get-property Cells 'Range "E4")'FormulaLocal)))) ;;;Speichern (vlax-invoke-method Workbook 'Close :vlax-true) ;;;Excel "loslassen" (vlax-release-object Excel)) (if (not error) (alert (strcat "Entweder ist die Datei " "\"C:\\temp\\Formula-FormulaLocal-LSP-VBA.xlsm\"" "nicht vorhanden oder das Tabellenblatt \"Tabelle\" " "exisitiert nicht."))) ) (princ) ) ;;;Exceldatei öffnen (defun JB_test:Excel:Open (dateipfad excel / ) (vlax-invoke-method (vlax-get-property excel 'Workbooks) 'Open dateipfad))
Kann mir einer sagen was ich da falsch gemacht habe??? Ich habe die Exceldatei und die LISP-Datei angehängt, zum ausprobieren die Exceldatei bitte auf c:\\temp\\ speichern. In der Exceldatei selber wird die VBA-Sub über Maktros -> "Test" gestartet. Die Lisp-Funktion "test" setzt voraus, daß die Exceldatei geschlossen ist. Wie immer bin ich dankbar für jeden Tipp. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Sep. 2012 18:33 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
Hallo, ich weis nicht ob es dir hilft oder funktioniert da ich es jetzt nicht getestet habe. aber über (setq Excel (vlax-get-or-create-object "Excel.Application")) (setq ExWSF(vlax-get-property Excel 'WorksheetFunction)) (vlax-invoke-method 'Sum ;hier noch den Zellbereich eintragen ) ;;; Wie der dann übergeben werden muss kann ich dir leider nicht sagen. kannst du Berechnungen ausführen. Wenn du ein (vlax-dump-object ExWSF T) anwendest siehst du alle Formeln. Ob das ganze einer Zelle zuzuordnen ist kann ich dir nicht sagen. Aber vielleicht hilft es. Gruß Wolfgang ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 26. Sep. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 27. Sep. 2012 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
Code: (vlax-put-property (vlax-variant-value (vlax-get-property ZielCells "ITEM" ze sp)) "FormulaR1C1Local" (strcat "=SUMME(Z" (itoa v_ze) "S" (itoa v_sp) ":Z" (itoa b_ze) "S" (itoa b_sp) ")" ) )
ZielCells wäre bei dir Cells Den Rest erkennst du - denke ich ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Sep. 2012 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 27. Sep. 2012 11:14 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Sep. 2012 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
Jörn - wir kennen uns einfach zu wenig mit Excel&VBA aus (das Thema ist Anfängertauglich, heul), Rübe hat mir folgendes aufgezeigt: In einem (zB.) deutschen Excel laufen engl.Funktionen nicht ! Wenn du mit VBA die Formel setzt dann wird sie Excel-intern umgewandelt (schau mal nach). Wenn man es per Hand eingibt (oder per Lisp zum Beispiel) dann wird es nichts automatisch umgewandelt, es kommt an was eingegeben wurde und somit läuft es nicht.
Was mit der deutschen Version auf einem englischen Excel passiert steht hier: http://www.wer-weiss-was.de/theme156/article6107218.html . So, da unser Programm also mit der SUMME nicht in einem engl. Excel laufen wird (gibt ja keine Umwandlung) bin auch ich an der Lösung interessiert um es internationaler gestalten zu können.. Hoffe aber des klarer im Trüben wurde ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 28. Sep. 2012 08:11 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle nochmal, ich habe gestern mit Martin noch telefoniert und sind zu dem Schluss gekommen, daß es aus LISP heraus einfach nicht funktioniert englische Formeln zu schreiben, Punkt. (Wenn mir einer das Gegenteil beweist nehme ich die Aussage super gerne wieder zurück). Also wenn nicht so, dann von hinten durch die Brust ins Auge: Mein Plan: In der zu beschreibenden Exceldatei wird eine VBA-Function definiert, in etwa so, irgendwo ist da noch ein kleiner Fehler:
Code:
Function MyFormula(Target As Range, str As String) As String Target.Formula = str MyFormula = "Interne Funktionszelle, nicht beachten, wird später wieder gelöscht." End Function
In der manuellen Eingabe wäre dann z.B. der Funktionsaufruf wie folgt: =MyFormula(A6;"=sum(B4:C4)") D.h., in der Zelle A6 wird durch diese Hilfsfunktion die englische Formel durch VBA geschrieben, und das funktioniert ja. Den Funktionsaufruf kann ich aus LISP heraus in eine beliebige Dummy-Zelle schreiben und nach Gebrauch wieder löschen. Ob das wirklich alles so funktioniert werde ich sicherlich demnächst noch herausfinden, jetzt muss ich erstmal wieder alles beiseite legen weil wieder andere Sachen wichtiger sind :-( ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |