Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable an Userform übergeben

Forumthread: Variable an Userform übergeben

Variable an Userform übergeben
22.04.2013 10:59:41
Horst
Schönen Guten Tag die Damen und Herren,
Mein Problem ist das folgende:
Bei einem Klick auf einen Button soll eine neue Tabelle geöffnet und mit gewissen Daten gefüllt werden. Im Nachgang ist der Bezug einer Userform auf dieses neue Tabellenblatt herzustellen. Da ein Klick auf diesen Button immer ein neues Tabellenblatt öffnen soll, wird die Benennung über eine Variable "Diagramm" & f zugeordnet. Das klappt soweit auch. Nun soll jedoch die Userform immer auf "Diagramm" & f zugreifen, das will jedoch nicht so recht. Wie übergebe ich die Variable f in meinem Code an die Userform?

Option Explicit
Dim i As Integer
Dim f As Variant
Private Sub UserForm_Initialize()
For i = 1 To 19
With Controls("CheckBox" & i)
' Bezeichnung aus Überschriften der Zeile 1 und Spalte in Tag-Eigenschaft ermitteln
.Caption = Worksheets("Diagramm" & f).Cells(1, CLng(.Tag)).Value
' Wert der Kontrollkästchen nach Anzeigezustand der Spalten einstellen
.Value = Not Worksheets("Diagramm" & f).Columns(CLng(.Tag)).Hidden
End With
Next i
End Sub
Private Sub CommandButton1_Click()
For i = 1 To 19
With Controls("CheckBox" & i)
' Spalte ausblenden, wenn CheckBox deaktiviert
Worksheets("Diagramm" & f).Columns(CLng(.Tag)).Hidden = Not .Value
End With
Next i
Unload Me
Zeitlicher_Verlauf.Show
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Bei mir erscheint immer Laufzeitfehler 9. Also denke ich, dass f nicht korrekt deklariert ist.
Vielen Dank für eure Hilfe!
Horst

Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable an Userform übergeben
22.04.2013 11:01:51
Hajo_Zi
Hallo Horst,
Userform1.Tag="Diagramm" & f
und Tag in UserForm auslesen.

AW: Variable an Userform übergeben
22.04.2013 11:10:47
Horst
Vielen Dank für deine fixe Antwort,
die Zeile Userform1.Tag="Diagramm" & f soll in den Code, in welchem das neue Tabellenblatt erstellt und benannt wird? Wie würde ich den Tag in der Userform dann aufrufen und deklarieren?

Anzeige
AW: Variable an Userform übergeben
22.04.2013 11:15:42
Hajo_Zi
warum aufrufen, deklarieren. Davon habe ich nichts geschrieben.
Worksheets(Userform1.Tag)
Gruß Hajo

AW: Variable an Userform übergeben
22.04.2013 11:18:06
Rudi
Hallo,
Da ein Klick auf diesen Button immer ein neues Tabellenblatt öffnen soll
zeig mal den Code.
Gruß
Rudi

Anzeige
AW: Variable an Userform übergeben
22.04.2013 11:34:06
Horst

Sub Hilfstabelle()
Dim f As Variant
f = 1
Sheets("Tabelle1").Select
Range( _
"D:D,E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N,O:O,V:V,W:W,X:X,Y:Y,Z:Z,AF:AF,AG:AG" _
).Select
Selection.Copy
Worksheets.Add.Name = "Diagramm" & f
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "0.00"
'Sheets("Diagramm" & f").Visible = False
Datenwahl.Tag = "Diagramm" & f
End Sub
f würde ich um 1 erhöhen, wenn das Diagramm gezeichnet wurde und demnach das f=1 am Anfang des Codes rausnehmen(in einen vorhergehenden Code, welcher nur einfach ausgeführt wird), damit f hier nicht wieder überschrieben wird

Anzeige
AW: Variable an Userform übergeben
22.04.2013 11:34:30
Horst
'Häckchen

AW: Variable an Userform übergeben
22.04.2013 11:40:53
Rudi
Hallo,
schreib f doch einfach in eine Public-Variable.
Gruß
Rudi

AW: Variable an Userform übergeben
22.04.2013 11:53:37
Horst
Das habe ich gemacht, trotzdem erscheint der Fehler...bei Anzeige von Datenwahl.Show:
Sub Weiter()
Call Hilfstabelle
Datenwahl.Show
End Sub
Wobei das doch weniger mit der Zeile als mit dem Unterprogramm zu tun haben sollte, oder?!

Anzeige
AW: Variable an Userform übergeben
22.04.2013 11:54:27
Horst
Häckchen die Zweite

AW: Variable an Userform übergeben
22.04.2013 12:25:03
Rudi
Hallo,
in ein Modul:
Option Explicit
Public f As Integer
Sub Weiter()
f = 2
Hilfstabelle
Datenwahl.Show
End Sub
Sub Hilfstabelle()
Sheets("Tabelle1").Range("D:O,V:Z,AF:AG").Copy
Worksheets.Add.Name = "Diagramm" & f
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "0.00"
End Sub

Gruß
Rudi

Anzeige
AW: Variable an Userform übergeben
22.04.2013 12:53:01
Horst
Danke für deine Hilfe!
Jetzt wird mir nur noch unter Markieren von f bei
.Caption = Worksheets("Diagramm" & f).Cells(1, CLng(.Tag)).Value
'Mehrdeutiger Name: ~' angezeigt.
Und noch eine allgemeinere Frage: Muss ich eine Public Variable in jedem Sub wieder deklarieren oder gilt das automatisch dann auch für diesen Code?

Anzeige
AW: Variable an Userform übergeben
22.04.2013 13:15:38
Rudi
Hallo,
Muss ich eine Public Variable in jedem Sub wieder deklarieren
dann gilt sie nur für diese Prozedur.
Lies doch mal die Hilfe zur Public-Anweisung.
Gruß
Rudi

AW: Variable an Userform übergeben
22.04.2013 14:33:31
Horst
Gut. Jetzt ist es ja schwer den Code einer Userform innerhalb einer Prozedur aufzufassen. Demnach muss ich diese doch à la Hajo übergeben, oder nicht?
Ich bin jetzt durchaus n bissl verwirrt, f wird immernoch nicht angenommen, demnach jetzt die Mischung aus eurer beiden Hinweise:

Option Explicit
Public f As Integer
Dim a As Variant
Sub Weiter()
f = 1
Hilfstabelle
Datenwahl.Show
End Sub
Sub Hilfstabelle()
Sheets("Tabelle1").Range("D:O,V:Z,AF:AG").Copy
Worksheets.Add.Name = "Diagramm" & f
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "0.00"
Datenwahl.Tag = "Diagramm" & f
End Sub

sowie:
Option Explicit
Dim i As Integer
Sub UserForm_Initialize()
'Worksheets (Datenwahl.Tag)
For i = 1 To 19
With Controls("CheckBox" & i)
' Bezeichnung aus Überschriften der Zeile 1 und Spalte in Tag-Eigenschaft ermitteln
.Caption = Worksheets(Datenwahl.Tag).Cells(1, CLng(.Tag)).Value
' Wert der Kontrollkästchen nach Anzeigezustand der Spalten einstellen
.Value = Not Worksheets(Datenwahl.Tag).Columns(CLng(.Tag)).Hidden
End With
Next i
End Sub
Sub CommandButton1_Click()
For i = 1 To 19
With Controls("CheckBox" & i)
' Spalte ausblenden, wenn CheckBox deaktiviert
Worksheets(Datenwahl.Tag).Columns(CLng(.Tag)).Hidden = Not .Value
End With
Next i
Unload Me
Zeitlicher_Verlauf.Show
End Sub
Sub CommandButton2_Click()
Unload Me
End Sub
Unter Anzeige von 'Datenwahl.Tag = "Diagramm" & f' erscheint Laufzeitfehler 9 :/

Anzeige
AW: Variable an Userform übergeben
22.04.2013 16:12:40
Rudi
Hallo,
Sub UserForm_Initialize()
'Worksheets (Datenwahl.Tag)
For i = 1 To 19
With Controls("CheckBox" & i)
' Bezeichnung aus Überschriften der Zeile 1 und Spalte in Tag-Eigenschaft ermitteln
.Caption = Worksheets("Diagramm" & f).Cells(1, CLng(.Tag)).Value
' Wert der Kontrollkästchen nach Anzeigezustand der Spalten einstellen
.Value = Not Worksheets("Diagramm" & f).Columns(CLng(.Tag)).Hidden
End With
Next i
End Sub

Sub CommandButton1_Click()
For i = 1 To 19
With Controls("CheckBox" & i)
' Spalte ausblenden, wenn CheckBox deaktiviert
Worksheets("Diagramm" & f).Columns(CLng(.Tag)).Hidden = Not .Value
End With
Next i
Unload Me
Zeitlicher_Verlauf.Show
End Sub

Gruß
Rudi

Anzeige
AW: Variable an Userform übergeben
22.04.2013 16:51:51
Horst
f bleibt leider nach wie vor ein 'mehrdeutiger Name: ~' :(
Danke für deine Mühen!

lad die Mappe hoch. owT
23.04.2013 10:19:10
Rudi

AW: Variable an Userform übergeben
23.04.2013 10:20:50
Horst
Ich habe mir selber geholfen mit einer Textbox. Vielen Dank ihr Zwee!

Anzeige
AW: Variable an Userform übergeben
25.04.2013 16:59:03
Horst
Kleine Anmerkung noch: Excel will bei mir deutsche Datumswerte, hat allerdings englische bekommen. Bei den meisten Monaten ist dies kein Problem, im März, Mai, Oktober sowie Dezember schon.
Ich habe das Problem über eine Select Case Schleife laufen lassen, welche z.B. aus dem englischen Mar das deutsche Mrz für den Monats-Array überschreibt.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Variable an Userform übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstelle eine Userform: Füge eine Userform in dein Excel VBA-Projekt ein.
  2. Füge Steuerelemente hinzu: Platziere z.B. Checkboxen und Buttons auf der Userform.
  3. Deklariere eine Variable: Lege eine öffentliche Variable f fest, um die Nummer des Diagramms zu speichern.
    Public f As Integer
  4. Benutze den Tag: Setze den Tag der Userform, um später darauf zuzugreifen.
    Datenwahl.Tag = "Diagramm" & f
  5. Initialisiere die Userform: Im UserForm_Initialize-Ereignis kannst du den Tag auslesen und die Checkboxen entsprechend setzen.
    Private Sub UserForm_Initialize()
        For i = 1 To 19
            With Controls("CheckBox" & i)
                .Caption = Worksheets(Datenwahl.Tag).Cells(1, CLng(.Tag)).Value
                .Value = Not Worksheets(Datenwahl.Tag).Columns(CLng(.Tag)).Hidden
            End With
        Next i
    End Sub
  6. Handle Button-Klicks: Schreibe Code für die Buttons, um die Checkboxen zu bearbeiten oder die Userform zu schließen.

Häufige Fehler und Lösungen

  • Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs): Dieser Fehler tritt häufig auf, wenn der Name des Arbeitsblatts nicht korrekt ist oder die Variable f nicht richtig gesetzt wurde. Stelle sicher, dass der Arbeitsblattname existiert.

  • Mehrdeutiger Name: Wenn Du den Fehler "mehrdeutiger Name: ~" erhältst, überprüfe, ob Du den Namen korrekt verwendest oder ob es Konflikte mit anderen Variablen gibt.

  • Variable nicht erkannt: Stelle sicher, dass f als Public deklariert ist, damit sie in der gesamten VBA-Anwendung verfügbar ist.


Alternative Methoden

  • Direkte Übergabe: Anstatt den Tag zu nutzen, kannst du die Variable f direkt in der Userform übergeben, indem Du die Userform mit einem Argument aufrufst.

    Datenwahl.Show f
  • Globales Modul: Definiere die Variable in einem allgemeinen Modul, um von überall darauf zugreifen zu können.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du die Userform mit einer Variable aufrufen und die Checkboxen entsprechend einstellen kannst:

Sub Weiter()
    f = 1 ' oder eine andere Logik zur Erhöhung
    Hilfstabelle
    Datenwahl.Show
End Sub

Sub Hilfstabelle()
    ' Code zum Erstellen des Diagramms
    Datenwahl.Tag = "Diagramm" & f
End Sub

Tipps für Profis

  • Nutze die Tag-Eigenschaft, um zusätzliche Informationen für Steuerelemente zu speichern. Dies ist besonders nützlich, wenn Du mehrere ähnliche Steuerelemente hast.

  • Halte Deine Variablen gut dokumentiert. Füge Kommentare hinzu, damit andere (oder Du selbst in der Zukunft) verstehen, was jede Variable tut.

  • Verwende Option Explicit am Anfang jeder Moduldatei, um sicherzustellen, dass alle Variablen deklariert sind, bevor Du sie verwendest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Variable f korrekt übergeben wird?
Achte darauf, dass f als Public deklariert ist und dass Du die Userform immer mit der richtigen Logik aufrufst.

2. Muss ich eine Public-Variable in jedem Sub wieder deklarieren?
Nein, eine Public-Variable wird einmal deklariert und bleibt für alle Subs im Modul verfügbar, solange die Excel-Arbeitsmappe geöffnet ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige