Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 20:05:21
28.04.2024 18:33:31
28.04.2024 18:25:12
28.04.2024 14:18:05
Anzeige
Archiv - Navigation
1932to1936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA in Ecxel aufrufen

VBA in Ecxel aufrufen
05.06.2023 10:31:15
lay

Hallo zusammen,

bitte kann mir jemand folgende Frage beantworten:

Ich habe ein kleinen VBA Code (Kreisfläche berechnen) geschrieben (Benutzerdefinierte Funktion) und möchte diesen in Excel aufrufen.
In Excel gebe ich ein Gleichheitszeichen ein, der Name wird angezeigt, aber es wird kein Ergebnis anzeigt.
Schreibe ich vor dem Namen, den Modulnamen, wird mir das Ergebnis angezeigt.

Ich kann mir das nicht erklären, mal funktioniert es ohne den Modulnamen, mal nicht.

Kann mir das jemand erklären, bitte?

VG Lay

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 10:34:24
Oberschlumpf
Hi,

a) schreib dein Makro, es müsste ja eine Function sein, oder, in ein allgemeines Modul
b) schreib direkt vor Function das Wort Public
c) wieso denkst du, dass es egal ist, welche Excel-Version du benutzt?

Hilfts?
Nein? Dann zeig uns bitte per Upload eine Bsp-Datei mit Bsp-Daten und deinem Code.

Ciao
Thorsten


AW: VBA in Ecxel aufrufen
05.06.2023 11:00:32
Lay
Hi Thorsten,

danke erstmal für Deine Antwort. Leider hilft es nicht.
Genau ich habe eine
Function geschrieben, gerade eben nochmal, spiel aber keine Rolle. Hier mein letzter Versuch:
Zahlen von 1 bis 100 addieren.

Der Code:
Function sum()
    x = 0
For i = 1 To 100
    x = x + i
Next i
    sum = x
End Function
Wenn ich dann in Excel die
Function aufrufe, klappt es mal und mal nicht. Es wird #Bezug! angezeigt.
Schreibe ich den Modulnamen davor, also =Modul1.sum() wird mir das Ergebnis angezeigt.

Mit public davor hat es auch nicht geklappt.

Danke und Gruß, Lay



Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 11:05:36
Oberschlumpf
Hi,

und wo ist deine Bsp-Datei und Antwort auf meine c)-Frage?

Ciao
Thorsten


AW: VBA in Ecxel aufrufen
05.06.2023 11:18:20
Lay
Oh, sorry, c) ich vermute, dass es egal ist, da das Problem an unterschiedlichen Rechnern mit unterschiedlichen Versionen immer mal wieder passiert. Aber ohne erkennbaren Grund für mich. Ich dachte, dass vielleicht jemand dasselbe Problem schon mal hatte bzw. welchen Fehler mache ich?


AW: VBA in Ecxel aufrufen
05.06.2023 11:36:05
Oberschlumpf
und ne Bsp-Datei haste immer noch nich...ok, ich bin raus...wünsch dir aber weiter viel Erfolg!


AW: VBA in Ecxel aufrufen
05.06.2023 12:10:51
Ulf
Es fehlt die Typangabe bei Rückgabe und Zähler, Funktionen sollten keine Syntax-Schlüsselworte enthalten (Summe~sum)
statt

Function sum()
     x = 0
 For i = 1 To 100
     x = x + i
 Next i
     sum = x
 End Function
besser

Public Function mySum() as Long
     Dim x as Long, i as Long
     x = 0
 For i = 1 To 100
     x = x + i
 Next i
    mySum = x
 End Function


Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 12:38:33
Pappawinni
Da kann man aber auch gleich eine Konstante zurück geben. Aber dann kann man sich DIE Funktion auch gleich ganz sparen. Es gibt schon Fälle, wo man Funktionen ohne Parameter brauchen kann. Ich hatte das in 40 Jahren 1 mal, kann mich aber noch nicht einmal erinnern, worum es da ging.


AW: VBA in Ecxel aufrufen
05.06.2023 12:10:54
Pappawinni
Funktion ohne Parameter muss man zur Ausführung überreden, indem man sie zum Beispiel mit einer Zufallszahl Funktion verknüpft, die immer ausgeführt wird.
Für deine Summe wusste Gauss eine einfache Berechnung. Für r^2*π braucht man auch nicht unbedingt eine Funktion, die hätte dann aber hoffentlich r als Parameter.


Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 13:42:35
Daniel
Um die Idee von Ulf nochmal aufzugreifen:

wenn du deiner selbstgeschriebenen Funktion einen Namen gibst, der in Excel schon als regulärer Funktionsname vorhanden ist, dann wird Excel immer die reguläre Funktion verwenden, weil es in der Gruppe der regulären Funktionen zuerst nachschaut. Erst wenn es den Namen dort nicht findet, wird es bei den selbstgeschriebenen Funktionen in den allgemeinen Modulen nachschauen, ob es die Funktion dort findet.
wenn du jetzt den Modulnamen davor schreibst, dann weist du Excel an, nur in diesem Modul nach der Funktion zu suchen, dh die regulären Funktionen werden dann übersprungen.

bei dir ist es jetzt so, dass du mit "sum" einen Funktionsnamen verwendet hast, der in einem deutschen Excel regulär nicht vorkommt, also wird in einem deutschen Excel deine Funkton "sum" immer verwendet.
in einem englischen Excel gibt es die Funktion "sum" auch in den regulären Funktionen, daher wird dann die verwendet, außer du schreibst den Modulnamen davor.

Daher sollte man seinen Funktionen und Makros immer Namen geben, die in Excel nicht verwendet werden, und dass in allen Sprachversionen, die zum einsatz kommen könnten.

Gruß Daniel


Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 14:14:30
Lay
https://www.herber.de/bbs/user/159473.xlsm

Sorry, dass hat etwas gedauert. Ich musste zwischendurch arbeiten und habe es nicht auf Anhieb hinbekommen.

Der Name ist von mir nur auf sum geändert worden. Bei meinen Übungen habe ich den Namen eindeutig gewählt, sum11, sum22 etc. bin da nicht so kreativ.

Da es mal funktioniert und mal nicht, vermute ich nicht, dass es am sauberen Code liegt oder am Namen.

Vielen Dank für all die Antworten.


AW: VBA in Ecxel aufrufen
05.06.2023 14:36:20
Daniel
Es gibt noch einen Bereich der für eigene Funktionsnamen tabu ist:
der Funktionsname darf nicht wie eine Zelladresse aussehen, also keine Kombination von 1-3 Buchstaben und danach Zahlen.
statt "sum11" also besser "sum_11"

Gruß Daniel


Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 18:46:50
Pappawinni
Wir hätten ja gerne deine Funktion gesehen, es ist mir nicht verständlich, warum du uns diese sinnbefreite Funktion zum Fraß vorwirfst. Auch da stecken zwar schon einige Schwächen drinn, aber ob damit dein Fall gelöst ist, kann bezweiflet werden.
Was Daniel zu Benennung von Funktionen schrieb, gilt übrigens relativ allgemein. Modolnamen, Variablennamen, Namen allgemein sollten eindeutig sein. Freilich ist bei global gültigen Namen mehr Aufmerksamkeit erforderlich, als bei Variablen, die nur innerhalb einer Funktion oder Subroutine ihre Gültigkeit haben. Es soll aber auch schon Leute gegeben haben, die If als Variable deklarieren wollten...


Anzeige
AW: VBA in Ecxel aufrufen
05.06.2023 18:56:42
Oberschlumpf
nu beruhich da ma wieder!
Lay hat es nicht besser gewusst - und DAS meine ich NICHT ironisch

auch wenn für ihn/von ihm der eine oder andere Code vielleicht schon bei ihm funktioniert, weiß er aber wegen....Basiskenntnisse in VBA....trotzdem noch gar nicht so wirklich, was er da tut.

und, sorry, als sinnbefreiten Fraß empfinde ich eher gerade deinen letzten Beitrag auf den ich gerade antworte - und das ist auch nicht ironisch gemeint
mit solchen Antworten werden Interessierte nur abgeschreckt und nicht mehr motiviert, ihr Interesse/Können an Excel(VBA) zu verstärken/verbessern.


Anzeige
AW: VBA in Excel aufrufen
05.06.2023 20:26:26
Pappawinni
Sorry, aber die Funktion ist nach wie vor sinnbefreit.
Ich wollte lediglich rüber bringen, dass es vielleicht sinnvoller gewesen wäre, die tatsächlich benutzte Funktion zu posten, die Probleme macht. Was da bei dir angekommen ist, war nur "Fraß". Das nenn ich Pech :)


AW: VBA in Excel aufrufen
06.06.2023 07:05:40
Lay
Guten Morgen und danke für die Kommentare.

Könnte mir nun eine/einer die Frage beantworten, warum die Function in der Zelle D13 funktioniert und in der Zelle D15 nicht. Sorry, ich hätte die Frage und die Datei gestern so stellen sollen. Lerne in allem ständig dazu.

Ich würde mich über eine Klärung freuen. Danke.


Anzeige
AW: VBA in Excel aufrufen
06.06.2023 08:59:22
Pappawinni
Welche Funktion denn?


AW: VBA in Excel aufrufen
06.06.2023 10:23:28
Daniel
Die Frage habe ich doch beantwortet!
LIES was man dir schreibt!

aber aus freundlichkeit hier nochmal für dich:
wenn du nur schreibst SUE22 oder auch SUM22, dann interpretiert Excel das als Zellbezug auf diese Zelle, kann aber damit nichts anfangen, weil du Klammern dahinter schreibst, außerdem SUE22 gibt es auch nicht als selbstgeschriebene Funktion
mit Modul1.Sum22() weiß Excel, dass es eine Funktion aus dem Modul1 sein soll.


AW: VBA in Excel aufrufen
06.06.2023 10:57:41
Pappawinni
Du hast in deinen Funktionen nirgends ein Public, dann Namen die mit Zelladressen konfliktieren usw.
Alles was schon gesagt wurde.
Versuch es etwa so:


Public Function KreisFläche(Radius) As Double
    KreisFläche = Radius ^ 2 * WorksheetFunction.Pi
End Function

Public Function KreisUmfang(Radius) As Double
    KreisUmfang = Radius * WorksheetFunction.Pi * 2
End Function
Public Function sumUpTo100() As Long

'Dim x As Long
'Dim i As Long
'
'    x = 0
'    For i = 1 To 100
'    x = x + i
'    Next i

sumUpTo100 = 5050

End Function

Public Function sumUptoN(n As Long) As Long

'Dim x As Long
'Dim i As Long
'
''ENTFERNEN: Dim n As Integer, da Mehrfachdeklaration.
''Eingabewert in Excel = n und n in VBA geht nicht.
'
'x = 0
'For i = 1 To n
'x = x + i
'Next i

'Gaußsche Summenformel
sumUptoN = n * (n + 1) / 2

End Function

Public Function sumFromTo(first As Long, last As Long) As Variant

Dim x As Long, i As Long

If first > last Then
   sumFromTo = CVErr(xlErrNA)
   Exit Function
End If

x = 0

For i = first To last
    x = x + i
Next i

sumFromTo = x

End Function




Anzeige
AW: Pi in VBA
06.06.2023 16:30:03
Pappawinni
Für die Kreiszahl PI gibt es in VBA mehrere Möglichkeiten.
Die schlechteste:
Pi = 3.14159265
oder ähnliches
bessere, weil genauere Alternativen: verwende Worksheetfunction.Pi oder ermittle Pi über den ArcusTangens von 1, mit 4 * atn(1)


AW: Pi in VBA
07.06.2023 06:46:08
Lay
Vielen Dank an alle.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige