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

Objekt an Funktion übergeben

Forumthread: Objekt an Funktion übergeben

Objekt an Funktion übergeben
Dirk
Hallo liebes Forum,
Ich habe lange rumprobiert aber es will nicht gelingen...
... Wie kann ich ein Objekt an eine Funktion übergeben?
Hier der Aufruf
Private Sub CommandButton1_Click()
Call createarray("Tabelle1", 2, 1, 35, Userform1.ListBox1)
End Sub
Hier die Funktion
Function createarray(Tabelle, abZeile, abSpalte, letzteSpalte, ctl as control)
Dim vntArray As Variant
Dim wksq As Worksheet
Dim lngspalte As Long
Dim lngLetzteZeile As Long
Dim lngabzeile As Long
lngabzeile = abZeile
lngspalte = abSpalte
Set wksq = Sheets(Tabelle)
lngLetzteZeile = wksq.Cells(wksq.Rows.Count, lngspalte).End(xlUp).Row
lngLetzteSpalte = letzteSpalte
vntArray = wksq.Range(wksq.Cells(lngabzeile, lngspalte), wksq.Cells(lngLetzteZeile, lngLetzteSpalte)).Value
cnt.List = vntArray
End Function Hoffe das, dass verständlich ist?!
Liebe Grüße
Dirk
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Objekt an Funktion übergeben
20.07.2010 21:18:45
Ramses
Hallo
Wenn schon müsste es statt
cnt.List = vntArray
ctl.List = vntArray
heissen.
Ungetestet könnte es so funktionieren
Ich gehe davon aus, dass die Funktion in einem externen Modul liegt
Private Sub CommandButton1_Click()
Call createarray("Tabelle1", 7, 1, 10, Me, Me.ListBox1.Name)
End Sub

Function createarray(Tabelle, abZeile, abSpalte, letzteSpalte, tarUF As UserForm, ctl As String)
Dim vntArray As Variant
Dim wksq As Worksheet
Dim lngspalte As Long
Dim lngLetzteZeile As Long
Dim lngLetzteSpalte As Long
Dim lngabzeile As Long
lngabzeile = abZeile
lngspalte = abSpalte
Set wksq = Sheets(Tabelle)
lngLetzteZeile = wksq.Cells(wksq.Rows.Count, lngspalte).End(xlUp).Row
lngLetzteSpalte = letzteSpalte
vntArray = wksq.Range(wksq.Cells(lngabzeile, lngspalte), wksq.Cells(lngLetzteZeile, lngLetzteSpalte)).Value
tarUF.Controls(ctl).List = vntArray
End Function
Gruss Rainer
Anzeige
AW: Objekt an Funktion übergeben
20.07.2010 21:21:23
Uduuh
Hallo,
1. eine Function wird nicht mit Call aufgerufen
2 warum weist du die übergebenen Variablen anderen Variablen zu? das ist überflüssig.
3. es müsste doch ctl.List heißen, nicht cnt.List
Private Sub CommandButton1_Click()
userform1.listbox1 = createarray(Sheets("Tabelle1"), 2, 1, 35)
End Sub
Function createarray(Tabelle As Worksheet, abZeile As Long, abSpalte As Long, letzteSpalte As  _
Long)
Dim lngLetzteZeile As Long
lngLetzteZeile = wksq.Cells(wksq.Rows.Count, abSpalte).End(xlUp).Row
createarray = wksq.Range(wksq.Cells(abZeile, abSpalte), wksq.Cells(lngLetzteZeile, letzteSpalte) _
).Value
End Function

Gruß aus’m Pott
Udo

Anzeige
AW: Objekt an Funktion übergeben
20.07.2010 21:25:04
Nepumuk
Hallo,
wo ist das Problem?
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub CreateList( _
        strTabelle As String, _
        lngAbZeile As Long, _
        lngSpalte As Long, _
        letzteSpalte As Long, _
        objListBox As MSForms.ListBox)

    
    With Sheets(strTabelle)
        objListBox.List = .Range(.Cells(lngAbZeile, lngSpalte), _
            .Cells(.Rows.Count, lngSpalte).End(xlUp)).Value2
    End With
    
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub CommandButton1_Click()
    Call CreateList("Tabelle1", 2, 1, 35, ListBox1)
End Sub

Gruß
Nepumuk
Anzeige
AW: Objekt an Funktion übergeben
20.07.2010 22:24:32
Dirk
Ja vielen lieben Dank an euch!!
Es funktioniert zumindest der Code von Ramses die anderen aber mit Sicherheit auch!!
Liebe Grüße
Der zutiefst dankbare Dirk
PS:
cnt sollte ctl heißen Tippfehler meinerseits ;)
PPS:
Vielleicht hat auch noch jemand einen Link zu Namenskonventionen mit denen tue ich mich als Bastler immer schwer. (Bin aber bereit dazu zu lernen;))
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Objekt an Funktion übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Objekt in Excel VBA an eine Funktion zu übergeben, befolge diese Schritte:

  1. Erstelle ein UserForm: Füge ein UserForm in dein Excel-Projekt ein und füge eine ListBox hinzu.

  2. Füge einen Button hinzu: Platziere einen CommandButton auf dem UserForm.

  3. Schreibe den Button-Code: Füge den folgenden Code in das Click-Ereignis des CommandButtons ein:

    Private Sub CommandButton1_Click()
       Call createarray("Tabelle1", 2, 1, 35, Me.ListBox1)
    End Sub
  4. Definiere die Funktion: Erstelle die Funktion, die die Daten von der Tabelle in die ListBox überträgt:

    Function createarray(Tabelle As String, abZeile As Long, abSpalte As Long, letzteSpalte As Long, ctl As MSForms.ListBox)
       Dim vntArray As Variant
       Dim wksq As Worksheet
       Dim lngLetzteZeile As Long
    
       Set wksq = Sheets(Tabelle)
       lngLetzteZeile = wksq.Cells(wksq.Rows.Count, abSpalte).End(xlUp).Row
       vntArray = wksq.Range(wksq.Cells(abZeile, abSpalte), wksq.Cells(lngLetzteZeile, letzteSpalte)).Value
       ctl.List = vntArray
    End Function
  5. Ausführen: Teste das UserForm, um sicherzustellen, dass die ListBox die gewünschten Daten anzeigt.


Häufige Fehler und Lösungen

  • Fehler: cnt statt ctl: Achte darauf, dass du den richtigen Variablennamen verwendest. Ändere cnt.List in ctl.List.

  • Fehler: Funktion wird nicht mit Call aufgerufen: In VBA wird eine Funktion nicht mit Call aufgerufen, sondern direkt. Verwende:

    userform1.listbox1 = createarray(Sheets("Tabelle1"), 2, 1, 35)
  • Fehler: Variablen nicht zuweisen: Vermeide es, übergebene Variablen unnötig anderen Variablen zuzuweisen, um den Code zu vereinfachen.


Alternative Methoden

Wenn du die Funktion ohne Verwendung eines UserForms nutzen möchtest, kannst du die Daten auch direkt in eine ListBox auf einem Arbeitsblatt laden. Hier ist ein Beispiel:

Sub LoadDataToListBox()
    Dim vntArray As Variant
    vntArray = Sheets("Tabelle1").Range("A1:A10").Value
    ActiveSheet.ListObjects("ListBox1").DataBodyRange.Value = vntArray
End Sub

Praktische Beispiele

Hier ist ein konkretes Beispiel für die Verwendung der Funktion createarray:

Private Sub CommandButton1_Click()
    Call createarray("Tabelle1", 2, 1, 35, Me.ListBox1)
End Sub

Function createarray(Tabelle As String, abZeile As Long, abSpalte As Long, letzteSpalte As Long, ctl As MSForms.ListBox)
    Dim vntArray As Variant
    Dim wksq As Worksheet
    Set wksq = Sheets(Tabelle)
    vntArray = wksq.Range(wksq.Cells(abZeile, abSpalte), wksq.Cells(wksq.Cells(Rows.Count, abSpalte).End(xlUp).Row, letzteSpalte)).Value
    ctl.List = vntArray
End Function

In diesem Beispiel wird die ListBox mit den Werten aus der Spalte A der Tabelle "Tabelle1" gefüllt.


Tipps für Profis

  • Verwende With-Anweisungen: Dies kann deinen Code sauberer und effizienter machen.

    With Sheets("Tabelle1")
       ctl.List = .Range(.Cells(abZeile, abSpalte), .Cells(.Rows.Count, abSpalte).End(xlUp)).Value
    End With
  • Namenskonventionen: Halte dich an einheitliche Namenskonventionen, um die Lesbarkeit und Wartbarkeit deines Codes zu verbessern. Vermeide Abkürzungen, die nicht allgemein bekannt sind.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die ListBox aktualisiert wird? Stelle sicher, dass du die ListBox nach jeder Änderung der Daten erneut aktualisierst, indem du die Funktion createarray erneut aufrufst.

2. Kann ich andere Steuerelemente als ListBox verwenden? Ja, du kannst auch andere Steuerelemente wie ComboBox oder TextBox verwenden, indem du den Typ im Funktionsparameter änderst.

3. Was mache ich, wenn mein Code nicht funktioniert? Überprüfe die Variablennamen, den Bereich der Daten und stelle sicher, dass das UserForm korrekt referenziert wird. Debugging ist oft der Schlüssel zur Lösung von Problemen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige