| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Einfache Frage (1218 mal gelesen)
|
NichterwitzP Mitglied Schüler

 Beiträge: 68 Registriert: 09.11.2006
|
erstellt am: 18. Jul. 2013 21:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo, sorry wenn ich mit einer so einfachen Frage nerve. Ich bin allerdings Anfänger und komm nicht weiter... Bei dieser einfachen Rechenoperation: Function Rechteckflaeche(L, B As Double) As Double Rechteckflaeche = L * B End Function hätte ich es gerne, dass ich die Werte L und B nicht über den Funktionsassistenten zuweise, sondern irgendwo im Quelltext sage: L=Wert aus Zelle b2. Am liebsten global, weil ich die Werte auch öfter bräuchte. Noch besser wäre - ich weiß nicht ob das geht - wenn man das Namenfeld, das man in Excel einer Zelle gegeben hat, verwenden könnte. Also L=Wert aus Zelle"Länge". Ich weiß - das ist der absolute Anfang - aber genau da steh ich auch gerade... Danke im Voraus! NichterwitzP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ

 Beiträge: 2897 Registriert: 06.07.2001 what i think? I think, no skill
|
erstellt am: 18. Jul. 2013 21:26 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
|
MWN Mitglied Dipl.-Ing.
 
 Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 19. Jul. 2013 08:38 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Guten Morgen, und wenn es doch per Makro sein soll: Code: Const Zelle1 As String = "B2" Const Zelle2 As String = "B3"Sub test() Dim l, b As Double l = CDbl(ActiveSheet.Range(Zelle1).Value) b = CDbl(ActiveSheet.Range(Zelle2).Value) MsgBox CStr(l) & vbCrLf & CStr(b) End Sub
Alternativ kannst du auch die entsprechenden Zellen benennen und deren Namen (z.B. Länge, Breite) der Range, anstatt Zelle1, Zelle2, mitgeben. Sieht dann so aus: Code: l = CDbl(ActiveSheet.Range("Länge").Value) b = CDbl(ActiveSheet.Range("Breite").Value)
Grüße und HTH Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 19. Jul. 2013 12:48 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Also ich denke auch, für diese Aufgabe ist das mit Kanonen auf Spatzen geschossen. Aber wenn du das nur stellvertretend als Beispiel für den Umgang mit VBA-Funktionen sehen willst: Behalte deine Funktion im VBA-Modul bei
Code: Function Rechteckflaeche(L, B As Double) As Double Rechteckflaeche = L * B End Function
In den entsprechenden Zellen schreibst du die Funktion einfach rein, wie jede andere Excel-Funktion, da brauchst du keinen Assistenten dafür: Code: =Rechteckflaeche(A1;B1)
Letzter Punkt: Du kannst jeder Zelle einen (fast) beliebigen Namen geben. Einfach die Zelle anwählen, dann kannst du in dem Feld links oberhalb der Tabelle, wo die Adresse der ausgewählten Zelle drin steht, einen Namen rein schreiben, z.B. "Länge" oder "Breite" (natürlich ohne die "") Dann kannst du diese Namen in deinen Formeln anstelle der Adressen verwenden: Code: =Rechteckflaeche(Länge;Breite)
------------------ Klaus www.al-ko.com | mein Gästebuch |
 [Diese Nachricht wurde von KMassler am 19. Jul. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NichterwitzP Mitglied Schüler

 Beiträge: 68 Registriert: 09.11.2006
|
erstellt am: 19. Jul. 2013 14:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Danke für die Antworten! Ich hätte mal dazuschreiben sollen, dass die Rechteckaufgabe natürlich nichts mit dem zu tun hat, was ich will - daran habe ich es nur erklären wollen... Ich will eigentlich nur ein lesbaren Anhang zu meiner Excelberechnung, also ein Quelltext, der für sich alleine schlüssig ist. Im Code von MWN sieht man ja, woher die Werte eingelesen werden. Jetzt würde ich mit den Werten rechnen (vorher definierte Variable Fläche=a*b) und bräuchte jetzt nur noch die Zeile, wie ich die Variable "Fläche" in eine Zelle zurückgebe, statt in einer Messagebox. Danke nochmal! MFG - NichterwitzP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
 
 Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 19. Jul. 2013 18:07 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Na dann genau anders herum: Code: Const Ausgabe as String = "B4" ActiveSheet.Range(Ausgabe).Value = CStr(Rechteckflaeche)
Grüße und HTH Tobias PS: die erste Zeile in deinem VBA - Projekt sollte: Option Strict On sein! -- Und jetzt bitte keinen Glaubenskrieg anfangen... Danke. -- ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." [Diese Nachricht wurde von MWN am 19. Jul. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NichterwitzP Mitglied Schüler

 Beiträge: 68 Registriert: 09.11.2006
|
erstellt am: 19. Jul. 2013 18:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo!! Danke für die Antwort - nur irgendwie kommt da 0 als Ergebnis raus. (Option strict will er auch nicht machen) Und dann interessiert mich noch, wie man dann in Excel sagt, das dieses Makro immer ausgeführt wird. Ich seh ja jetzt nur durch die F5-Prüfung ob es funktioniert. Wenn es dann mal funktioniert, soll er ja immer l x b rechnen. Jetziger Code: Const Länge As String = "B1" Const Breite As String = "B2" Const Ausgabe As String = "B3" Sub test() Dim l, b, Fläche As Double l = CDbl(ActiveSheet.Range(Länge).Value) b = CDbl(ActiveSheet.Range(Breite).Value) Fläche = A * b ActiveSheet.Range(Ausgabe).Value = CStr(Fläche) End Sub Schönes Wochenende! NichterwitzP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Ehrenmitglied V.I.P. h.c. Konstrukteur
     
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Jul. 2013 10:11 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Servus Du hast einen Schreibfehler in der Rechnung (Variabel A gibt es nicht). Zusätzlich würde ich Sonderzeichen (zB Umlaute) in Variablennamen vermeiden. Code: Flaeche = l * b
Warum willst du das Makro immer ausführen? Was hast du vor? Du solltest versuchen dein Ablauf/Rechnung über normale Excel-Formel zu erstellen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 22. Jul. 2013 09:38 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Wenn du das so machst, wie ich dir oben beschrieben habe, dann wird die Funktion nach den selben Regeln neu berechnet, wie jede Standard-Excel-Funktion. Und du sparst dir den gesamten Declarations-Wasserkopf Und du kannst die Formel auf beliebige Zellen anwenden, ohne diese im VBA-Modul zu definieren. ------------------ Klaus www.al-ko.com | mein Gästebuch |
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
 
 Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 22. Jul. 2013 10:49 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Stimmt Klaus, das einfachste und wirklich einfachste, wäre, eine benutzerdefinierte Funktion, die im Excel genau so verwendet wird, wie eine Standard Excelfunktion, zu erstellen. Allerdings sollte die Berechnung der Recheckfläche, wenn ich es richtig verstanden habe, nur als Beispiel dienen und hinter den Fragen ein anderer Sinn stecken... Mal sehen, vielleicht klärt uns der Fragesteller noch auf, denn dann können hier noch weitere Anregungen gegeben werden... Grüße Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NichterwitzP Mitglied Schüler

 Beiträge: 68 Registriert: 09.11.2006
|
erstellt am: 22. Jul. 2013 14:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ooh mann - ja, ein schöner Fehler...! Danke dafür.. Der Grund weshalb ich das so machen wolle, ist eigentlich nur, dass mein Professor gesagt hat, dass er es gerne in Visual Basic hätte. Dabei kann man die Funtionen auch einfach in Excel mit den Zellbezügen machen - auch wenn es bei mehreren Schleifen langsam unübersichtlich wird. In Delphi war ich es so gewohnt StrToFloat(Eingabe) - verständliche Variablen deklarieren - mit denen rechnen - und FloatToStr(Ausgabe) und man hat einen schönen übersichtlichen und prüfbaren Quelltext den ich in meinen Anhang stellen kann. Meine Berechnungen selbst erfordern nicht unbedingt VBA. Aber ich werde jetzt die Funktionen "programmieren", bei denen es sich anbietet und ansonsten von den eher umständlichen Zellbezügen über VBA absehen! Zu der Erkenntnis musste ich hier erstmal kommen! Vielen Dank auf jeden Fall für die Antworten! MFG NichterwitzP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 24. Jul. 2013 14:35 <-- editieren / zitieren --> Unities abgeben:          Nur für NichterwitzP
Zitat: Original erstellt von MWN: Stimmt Klaus, das einfachste und wirklich einfachste, wäre, eine benutzerdefinierte Funktion, die im Excel genau so verwendet wird, wie eine Standard Excelfunktion, zu erstellen. Allerdings sollte die Berechnung der Recheckfläche, wenn ich es richtig verstanden habe, nur als Beispiel dienen und hinter den Fragen ein anderer Sinn stecken... Mal sehen, vielleicht klärt uns der Fragesteller noch auf, denn dann können hier noch weitere Anregungen gegeben werden... GrüßeTobias
äh..hab ich doch geschrieben? Zitat: Original erstellt von KMassler: Also ich denke auch, für diese Aufgabe ist das mit Kanonen auf Spatzen geschossen. Aber wenn du das nur stellvertretend als Beispiel für den Umgang mit VBA-Funktionen sehen willst...
War schon klar, dass das nur ein Beispiel sein soll. Ist doch kein Problem, statt der Rechteckflächenformel jeden beliebigen Inhalt hier rein zu schreiben. Ist ME doch die einfachste Variante. Aber wie immer: Viele Wege führen nach Rom.
------------------ Klaus www.al-ko.com | mein Gästebuch |
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |