Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Excel: Formula - FormulaLocal

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Excel: Formula - FormulaLocal (3869 mal gelesen)
joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 26. Sep. 2012 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Formula-FormulaLocal-LSP-VBA.xlsm.txt


Formula-FormulaLocal-LSP-VBA.lsp.txt

 
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").FormulaLocal

End 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



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 26. Sep. 2012 18:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für joern bosse 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 27. Sep. 2012 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für joern bosse 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 27. Sep. 2012 10:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für joern bosse 10 Unities + Antwort hilfreich

setzen, 6  

EDIT:
@Jörn, ich kann dir nur sagen das ich es nachvollziehen kann, aber nicht weiter teste (Zeit).
Interessantes Ergebnis wenn du die Formeln mit VBA setzt und dann mit Lisp versuchst auszulesen 

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

[Diese Nachricht wurde von cadffm am 27. Sep. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 27. Sep. 2012 11:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

ERstmal danke für die Rückmeldungen, ich muss das ein bißchen zurückstellen, werde mir das heute abend oder morgen früh anschauen.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 27. Sep. 2012 11:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für joern bosse 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 28. Sep. 2012 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz