Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
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
Userform Name in Makro als Variable aus Zelle?
25.09.2018 10:51:25
Peter
Hallo ihr Excelspezialisten,
ich habe in meiner Datei mehrere Makros.
z.B. suchbegriff = UF_Buchung.TextBox12
Kann man den Namen UF_Buchung durch einen Wert aus Zelle einer Tabelle übernehmen?
Besten Dank für eure Hilfe.
Gruss
Peter

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

Betreff
Datum
Anwender
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 11:09:11
Martin
Hallo Peter,
so ganz habe ich deine Frage nicht verstanden. Falls zu die Bezeichnung in der Überschrift meinst, verwende folgenden Code:
UF_Buchung.Caption = Sheets("Tabelle1").Range("A1")
Wenn der TextBox12 der Zellinhalt zugewiesen werden soll, geht es so:
UF_Buchung.TextBox12 = Sheets("Tabelle1").Range("A1")
Viele Grüße
Martin
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 11:15:02
Peter
Hallo Martin,
das hast Du falsch verstanden oder ich mich falsch ausgedrückt.
Das Makro lautet Orginal:
Sub Auswahl_der_Gesamtkonten_Überschriften_einfügen_Gesamtkonto_Test()
Dim rng As Range
Dim i As String
Dim suchbegriff As String
Dim UFName As String      'neu eingefügt
UFName = Worksheets("Hilfstabelle2").Range("P5").Value   'neu eingefügt
'suchbegriff = UF_Buchung.TextBox12    '= Orginal
suchbegriff = UserForms(UFName).TextBox12  'neu eingefügt - Fehlermeldung
Worksheets("Hilfstabelle").Activate
Set rng = ActiveSheet.Range("A2:A201").Find(suchbegriff)
If rng Is Nothing Then
MsgBox "Nichts gefunden"
Exit Sub
End If
'MsgBox "Zeile: " & rng.Row & "; Adresse: " & rng.Address
'i wählt die akuelle gesuchte und markierte Zeile
i = rng.Row
Range(Cells(i, 4), Cells(i, 14)).Copy
'fügt die kopierten Daten in Gesamtkonto Zeile2 ein
Sheets("Gesamtkonto").Cells(2, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks:=False, Transpose:=False
Sheets("Gesamtkonto").Activate
End Sub

Wie Du erkennen kannst möchte ich den Namen für die UF ersetzen aus Name aus Range("P5")
Danke für Deine Hilfe.
Gruss
Peter
Anzeige
Noch nicht lange her; hatten wir kürzlich ...
25.09.2018 12:11:36
Luc:-?
…schon mal, Peter,
Stichwort CallByName (zZ nur über ThemenTitel-RECHERCHE), eine vbFkt, die die 3.Art des VariablenAufrufs (sonst üblich CallByRe­ference und CallByValue) simuliert und unbedingt ein zugehöriges Parent-Objekt erfordert. Die Variable müsste also global in einem (Dokument-)KlassenModul deklariert wdn (kann dort nicht als globale Konstante deklariert wdn!). Hatte ich beim letzten Fall aus­führ­lich erläutert.
Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
AW:erledigt
25.09.2018 12:14:26
Peter
Hallo Luc,
das ist zu kompliziert und umständlich - da gehe ich lieber einen anderen Weg.
Besten Dank
Gruss
Peter
Der damalige Frager hatte allerdings mehr ...
25.09.2018 13:49:10
Luc:-?
…als nur VBA-Basiskenntnisse! Aber irgendwann muss man damit anfangen, wenn man sich ehrgeizige Ziele setzt, Peter!
Luc :-?
Das kann so nicht funktionieren...
25.09.2018 12:14:21
EtoPHG
Peter,
Wenn, dann über Klassenprogrammierung und der dynamischen Instanzierung von Userform(s). Aber das liegt weit über einem Basis-Kenntnis-Level. Google halt "VBA Klassenprogrammierung" oder schau Dir Filmchen auf Youtube dazu an!
Ich frage mich schon, warum mit Basiskenntnissen gleich in solche Konstrukte eingetaucht wird. Ich bin der Meinung, dass man erst das Objekt-Modell von Excel verstehen sollte, treffe aber immer wieder Anfänger, die weder dir F1, noch die F2 Taste im VBA-Editor benutzen. Ich würde Dir Empfehlen mir Fragen bezüglich der Funktionalität (Eingabe-Verarbeitung-Ausgabe), die du erreichen willst, zu stellen. Dich also weniger auf einen bereits festgelegten Weg (in deinem Beispiel Userforms), zu versteifen. Dann gibt es oft hilfreiche Tipps von Helfern wie man das Ganze aufbauen könnte.
Gruess Hansueli
Anzeige
AW:erledigt
25.09.2018 12:16:37
Peter
Hallo Hansueli,
hat sich erledigt - zu kompliziert.
Gruss
Peter
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 12:21:47
Martin
Hallo Peter,
ich verstehe dein Makro zwar nicht, aber hier die prinzipielle Lösung wie du das UserForm per Namen aus einer Zelle finden und ansprechen kannst:
Sub Auswahl_der_Gesamtkonten_Überschriften_einfügen_Gesamtkonto_Test()
Dim rng As Range
Dim i As String
Dim suchbegriff As String
Dim objUserForm As UserForm
Dim UFName As String      'neu eingefügt
UFName = Worksheets("Hilfstabelle2").Range("P5").Value   'neu eingefügt
Set objUserForm = FindUserFormByName(UFName)
If objUserForm Is Nothing Then
MsgBox "Es gibt kein geöffnetes UserForm mit dem Namen " & UFName, vbExclamation
Exit Sub
End If
suchbegriff = objUserForm.TextBox12
Worksheets("Hilfstabelle").Activate
Set rng = ActiveSheet.Range("A2:A201").Find(suchbegriff)
If rng Is Nothing Then
MsgBox "Nichts gefunden"
Exit Sub
End If
'MsgBox "Zeile: " & rng.Row & "; Adresse: " & rng.Address
'i wählt die akuelle gesuchte und markierte Zeile
i = rng.Row
Range(Cells(i, 4), Cells(i, 14)).Copy
'fügt die kopierten Daten in Gesamtkonto Zeile2 ein
Sheets("Gesamtkonto").Cells(2, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Gesamtkonto").Activate
End Sub
Function FindUserFormByName(strUserFormName As String) As Object
Dim i As Integer
Set FindUserFormByName = Nothing
For i = 0 To UserForms.Count - 1
If UserForms(i).Name = strUserFormName Then
Set FindUserFormByName = UserForms(i)
Exit Function
End If
Next
End Function
Viele Grüße
Martin
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 12:24:47
Peter
Hallo Martin,
besten Dank für Deine Hilfe.
Ich werde es demnächst testen.
Melde mich wieder.
Gruss
Peter
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 12:50:55
Mullit
Hallo,
einfach über die Add-Methode der Forms-Aufl.:
'...
Dim suchbegriff As String, UFName As String
UFName = Worksheets("Hilfstabelle2").Range("P5").Value   'neu eingefügt
suchbegriff = UserForms.Add(UFName).TextBox12.Value
'...

Gruß, Mullit
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 12:52:47
Peter
Hallo Mullit,
diese Version habe ich bereits getestet - Fehlermeldung
Danke
Gruss
Peter
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 12:58:31
Mullit
Hallo,
nö, nich ganz....;-)
Dein Test:
suchbegriff = UserForms(UFName).TextBox12

Code-Add-Method:
suchbegriff = UserForms.Add(UFName).TextBox12.Value

Gruß, Mullit
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 13:18:18
Mullit
....das ist auch irgendwie 'n bißchen schlecht dokumentiert, hab nochmal 'n Auszug aus der Hilfe...
 
UserForm Object

A UserForm object is a window or dialog box that makes _ up part of an application's user interface.

The UserForms collection is a collection whose elements represent each loaded UserForm in an application. The UserForms collection has a Count property, an Item property, and an Add method. Count specifies the number of elements _ in the collection; Item (the default member) specifies a specific collection member; and Add places a new UserForm element in the collection.
Syntax

UserForm

UserForms[.Item](index)

The placeholder index represents an integer with a range from 0 to UserForms.Count – 1. Item is the default member of the UserForms collection and need not be specified.

_ Remarks

You can use the UserForms collection to iterate through all loaded user forms in an application. It identifies an intrinsic global variable named UserForms. You can pass UserForms(index) to a function whose argument is specified as a UserForm class.

Gruß, Mullit
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
25.09.2018 13:18:47
Peter
Hallo Mullit,
ich werde es nochmals testen.
Besten Dank
Gruss Peter
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 00:58:59
Martin
Hallo Mullit,
dein Ansatz war für mich neu (und interessant!), deshalb habe ich deinen Code mal getestet.
Ich finde deinen Code aufgrund seiner Kürze sehr schön. Es gibt aber leider einen entscheidenden Schwachpunkt deiner Lösung:
Wenn das UserForm geöffnet ist (zum Beispiel mit ShowModal = False) und der Inhalt von TextBox12 geändert wird, wird als Suchbegriff nicht der tatsächliche Inhalt der TextBox12 wiedergegeben, sondern der unter Eigenschaften festgelegte Value-Standardwert. Allerdings habe ich es unter Excel 2003 getestet, vielleicht verhält es sich bei aktuelleren Excel-Versionen anders.
Es gibt aber auch einen Vorteil deiner Lösung: Das UserForm muss nicht geladen sein. Nur warum sollte man einen statisch festgelegten TextBox-Valuewert abfragen wollen?!
Viele Grüße
Martin
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 16:52:53
Mullit
Hallo Martin,
ja stimmt, in der prakt. Anw. bei geöffneter Form entsteht das Problem, da ist Deine Function vorzuziehen, wenn man den Namen nicht gleich bei der .Show-Methode einliest...top..!
Der Grund ist, daß auch bei der Add-Methode die Form gerade doch geladen wird, d.h. Du hast zwei Forms der gl. Instanz in der UserForms-Collection, kannst Du daran sehen, daß UserForms.Count = 2 ist und jeweils das Initialize-Event gefeuert wird, daher entsteht dann auch das TextBox-Problem: Man schreibt in die Box der Form der ersten Instanz und liest aus der Box der zweiten aus, das sollte dann auch Xl-vers.-unabhängig der Fall sein...
Gruß, Mullit
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 16:55:19
Peter
Hallo Mullit,
Du hast mir dies bereits mitgeteilt.
Ich muss das Problem leider hinten anstellen.
Danke
Gruss
Peter
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 17:00:00
Mullit
Hallo,
hm ok, macht nix, der Beitrag war jetzt auch eher an Martin (s. Anrede) gerichtet...
Gruß, Mullit
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 21:23:54
Martin
Hallo Mullit,
das ist ja wirklich beeindruckend, ich habe das gerade getestet! Ein UserForm kann tatsächlich mehrfach parallel aufgerufen werden. Wahrscheinlich werde ich das in der Praxis nie brauchen, aber trotzdem gut zu wissen ;-)
Vielen Dank!
Martin
PS: Hattest du mir nicht vor längerer Zeit bei meinem Kontextmenü-Aufruf mit der API-Funktion geholfen? Falls ja: Ich habe mich wirklich weiter mit API beschäftigt und steuere jetzt mit Excel eine andere Anwendung fern.
Anzeige
AW: Userform Name in Makro als Variable aus Zelle?
26.09.2018 23:28:30
Mullit
Hallo Martin,
ja stimmt das hat schon was, ist ne interessante Eigenschaft, aber auch ne böse Falle, die ich bei meinem Code-Vorschlag so schnell auch nicht geblickt hab...
Ja ich kann mich dunkel erinnern, das war das Aufklappen der Submenüs der CmbBar-Kontextmenüs, klasse das Du da dran geblieben bist, ich muß da auch wieder aktiver werden, um nicht einzurosten...
Gruß, Mullit

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige