Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1400to1404
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

Sub aus Arbeitsmappe in Userform aufrufen

Sub aus Arbeitsmappe in Userform aufrufen
12.01.2015 14:13:43
junior
Hallo,
wie kann ich eine Prozedur bzw. Sub, die in meiner Arbeitsmappe (Tabelle1(Tabelle1)) steht, aus einer UserForm aufrufen?
Habe in Tabelle1 (Tabelle1) eine
Sub Wert_holen()
'z.B.
wert = 10
End Sub
stehen. diese möchte ich aus meiner Userform per click nach bedarf holen.
Dachte es geht einfach mit:
Private Sub Wert_laden_Click()
Call Wert_holen
'diesen wert übergeben und in Label1 schreiben
UserForm1.Label1 = wert
End Sub

Leider funktioniert es nicht, mit der Meldung das die Sub nicht definiert ist. Mit der Hilfe komme ich nicht weiter, soll einen Verweis setzen?
Unter Extras -> Verweis findet man nur irgendwelche Bibliotheken usw.
Wieso funktioniert das nicht? Kennt meine UserForm nicht die Subs in meiner Arbeitsmappe? Ist doch die Gleiche Datei.
Gruß

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Call Tabelle1.Wert_holen
12.01.2015 14:21:05
{Boris}
VG, Boris

... "wert" als Public-Variable deklarieren
12.01.2015 14:26:26
ChrisL
Hi
Zusätzlich in einem Standardmodul
Public wert As Integer
(Integer für Ganzzahlen bis 32.767)
Generell scheint mir die Methode aber eher fraglich. Vielleicht wäre eine Funktion besser geeignet, Beispiel:
Private Sub CommandButton1_Click()
MsgBox wert_holen
End Sub

Private Function wert_holen() As Integer
wert_holen = 10
End Function

cu
Chris

Deswegen muss aber dennoch...
12.01.2015 14:34:41
{Boris}
Hi Chris,
der Name des entsprechenden Klassenmoduls (hier: Tabelle1) vorangestellt werden.
VG, Boris

Anzeige
stimmt, war als Ergänzung gedacht oT
12.01.2015 15:49:16
ChrisL
cu
Chris

Subs und Fuctions, ...
12.01.2015 14:56:56
Rudi
Hallo,
... die Projektweit genutzt werden, sollten in einem Standardmodul stehen.
Gruß
Rudi

AW: Subs und Fuctions, ...
12.01.2015 15:28:11
junior
Hallo,
danke zunächst.
Habe es mit Public deklariert.
Es klappt aber auch nur wenn ich
UserForm1.Label1 = wert
in der Sub in Tabelle1 (Standardmodul) schreibe.
Wenn ich es in der Sub vom Userform nach dem Aufruf der Sub -> Call Tabelle1.wert_holen schreibe,
wird Label1 nicht mit Werten gefüllt.
Gibt es da eine Erklärung?
Also obwohl ich in der Arbeitsmappe eine Variable als Public deklariere kann ich diese nicht in der Userform so nutzen.
Gruß

Anzeige
AW: Subs und Fuctions, ...
12.01.2015 15:32:30
Rudi
Hallo,
Habe es mit Public deklariert.
Wo?
Publicvariablen müssen zwingend in einem Standardmodul deklariert werden.
Gruß
Rudi

Sollten, Rudi, sollten, sonst muss man ...
12.01.2015 15:47:32
Luc:-?
…sich ebenfalls auf die Klasse beziehen und die Variable muss natürlich Public sein.
Das kann in bestimmten Fällen auch von Vorteil sein. Wenn man gleichzeitig mit mehreren Mappen arbeiten will, sollten die StandardDokKlassenNamen aber auf Eindeutigkeit geändert wdn (inkl VBAProject)!
Gruß, Luc :-?

AW: Subs und Fuctions, ...
12.01.2015 16:21:36
junior
Hallo,
ist Tabelle1 = Standardmodul? Oder was ist damit genau gemeint?
Habe es in Tabelle1 ganz oben vor allen Subs deklariert:
Public wert As Integer

Und danach kommen alle meine Subs und Funktionen.
Also

Public wert As Integer
Sub eins()
wert=10
End Sub
Sub zwei()
End Sub

und in der Userform1 steht:
Private Sub UserForm_Initialize()
'Wert holen
Call Tabelle1.eins
UserForm1.Label1 = wert
End Sub
und so klappt es halt nicht. Ich muss UserForm1.Label1 = wert schon in der Sub eins() rein schreiben.

Anzeige
AW: Subs und Fuctions, ...
12.01.2015 16:30:51
Rudi
Hallo,
ist Tabelle1 = Standardmodul?
nein. Das ist ein Klassenmodul.
Standardmodul: Rechtsklick auf dein Projekt, Einfügen, Modul.
Gruß
Rudi

AW: Subs und Fuctions, ...
12.01.2015 18:13:04
junior
Alles klar!
Jetzt läuft alles...
Also ist das Modul quasi die Höhste Instanz. Die an alle Klassenmodule vererben kann.
DANKE

Ich hatte geschrieben, dass das eine Frage ...
12.01.2015 18:58:13
Luc:-?
…der Identifikation ist, Junior;
von einem StandardModul (PgmModul, Endung bei Export .bas) aus kannst du alles im jeweiligen Projekt direkt erreichen, was nicht Private, aber ggf Public ist (aber auch StandardModule mit Option Private Module), es muss nur entsprd richtig und vollständig referenziert wdn. Alles, was in einem KlassenModul steht (Endung bei Export .cls; die „Rückseiten“ der Blätter und der Mappe sind auch welche, aber eigenen Typs DocumentClassModule), ist diesem zugeordnet. Eine Referenz auf seine Inhalte muss stets mit vorgesetztem KlassenNamen erfolgen, hier also Tabelle1.wert, wenn wert als Public wert am Anfang des KlassenModuls deklariert wurde. Das Problem besteht eigentlich nur darin, dass diese Namen interne StandardNamen sind, die von Mappe zu Mappe stets gleich sind. Aber man kann sie auch ändern!
Übrigens kann man auch EreignisProzeduren eines DokKlassenModuls von außen aufrufen. Da diese aber stets Private sind, kann das nur indirekt erfolgen. Man muss also eine Public (Ruf-)Prozedur ins Klassenmodul setzen, die den DirektAufruf vornimmt. Diese RufProzedur kann man dann von außerhalb des DokKlassenModuls (als Methode der Klasse!) aufrufen. So etwas benötigt man aber nur selten. Allerdings kann man das auch mit Fktt machen und kann so jedes KlassenModul als Container ala WorksheetFunction für eigene UDFs benutzen. In ZellFmln wäre ihre Benutzung aber recht umständlich bis unmöglich, weshalb dafür noch ein aufrufender UDF-Korpus in einem StandardModul existieren sollte.
Gruß, Luc :-?
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige