Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
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

Objektvariable

Objektvariable
12.10.2015 22:31:48
Rainer
Guten Abend,
in meinem VBA Projekt nutze ich mehrere UserForms. In manchen der Forms befindet sich die ListBox "LiBoA". Die Prozeduren diese ListBoxes mit Daten zu füllen sind fast immer gleich. Gerne würde ich nur eine LiBoA-Füll-Prozedur verwenden. Dazu müsste aber der Name der UserForm in einer Variablen gespeichert sein. Ich habe es mit "Dim UFoA as Object" probiert aber ich bekomme immer die Fehlermeldung 91: Objekt- oder With-Block-Variable nicht festgelegt. Auch mit der Set-Anweisung habe ich keinen Erfolg gehabt. Kann mir da bitte jemand einen Tipp geben. Vielen Dank.
Gruß Rainer.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariable
12.10.2015 23:00:54
Sepp
Hallo Rainer,
angenommen, deine UF's heißen "frnOne", bzw. "frmTwo".
Du brauchst der Prozedur nicht die UF mitgeben, sondern die "richtige" ListBox.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub fill_ListBox(ByRef objListBox As MSForms.ListBox)
Dim lngI As Long

With objListBox
  .Clear
  For lngI = 1 To 10
    .AddItem "Item " & lngI 'nur als Beispiel
  Next
End With
End Sub

Sub test()

With frmOne
  fill_ListBox .LiBoA
  .Show
End With

With frmTwo
  fill_ListBox .LiBoA
  .Show
End With
End Sub

Gruß Sepp

Anzeige
AW: Objektvariable
12.10.2015 23:31:49
Rainer
Hallo Sepp,
vielen Dank für die schnelle Antwort. Ich werde den Code ausprobieren, habe aber einige Zweifel ob dieser meinen Bedürfnissen gerecht wird. Daher möchte ich dir noch mehr Details zu meinem Projekt mitgeben. Ich arbeite an einem Programm für eine Schülerbibliothek. Dabei kommt es sehr oft vor, dass eine Liste mit Schülern oder eine Liste mit Büchern dargestellt werden soll. Ich habe die UserForms UFoA (Bücher ausleihen), UFoB (Bücherverwaltung) UFoR (Buchrücknahme) und UFoS (Schülerverwaltung)genannt. Alles ist eigentlich fertig und funktioniert sehr gut. Nun habe ich festgestellt, dass die Prozeduren zur Auflistung der Schüler bzw. der Bücher fast identisch sind. Ob nur die Daten der ausgeliehen Bücher oder die eines bestimmten Autors gelistet werden soll habe ich gelöst. Ebenso ob alle Schüler oder nur die einer bestimmten Klasse dargestellt werden sollen ist alles kein Problem. Ich möchte eigentlich nur probieren ob ich die Aufgabe zur Auflistung (egal ob Schüler oder Bücher) mit einer einzigen Prozedur oder besser noch mit einer Funktion erledigt werden kann. Dazu müsste ich jedoch der Funktion mitteilen von welcher UserForm sie angesprochen wird und an welche UserForm sie Daten zurückgeben soll. Daher brauche ich eine Variable die den Namen der UserForm speichert. Übrigens jede der o.g. UserForms hat ein TextBox "TeBoSuBe" und eine ListBox "LiBoA".
Ich hoffe, ich habe dich nicht zu sehr zugetextet und freue mich schon auf deinen nächsten Tipp.
LG Rainer.

Anzeige
AW: Objektvariable
13.10.2015 19:15:16
Sepp
Hallo Rainer,
den Namen der UF brauchst du nicht, wenn du die richtige Listbox an die Funktion/Sub übergibst, dann wird auch die richtige angesprochen.
Ansonsten lade mal eine Beispieldate mit Beschreibung hoch.
Gruß Sepp

AW: Objektvariable
17.10.2015 01:28:38
Rainer
Hallo Sepp,
um die Sache unter realen Bedingungen zu testen habe ich jetzt eine komplette Prozedur mit sehr vielen If-Strukturen gebaut. Ich habe eben viele Möglichkeiten zu verarbeiten. Deshalb muss ich der Sub LiBoAfill() auch ein paar Argumente liefern. Gestartet wird LiBoAfill aus der UserForm "UFoX" heraus mit der Prozedur
  • Private Sub Daten_listen()
    Dim SuBe As String
    SuBe = UFoX.TeBoSuBe.Value
    With UFoX
    .LiBoAfill(S, SuBe, SuTec, VisOpt, WS).LiBoA
    End With
    End Sub
    Leider reklamiert VBA, dass die Argumente mit ByRef nicht verträglich seien. Die Variablen sind bis auf "WS" vom Typ Byte, WS ist mit String deklariert. So weit ich weiß, ist es nicht möglich innerhalb einer Argumentenklammer 2 verschiedene Argumenttypen (ByVal und ByRef) anzuwenden. Wo ist der Fehler?
    Der Vollständigkeit halber hier noch die Prozedur ...
    Sub LiBoAfill(ByRef objListBox As MSForms.ListBox, S, SuBe, SuTec, VisOpt, WS)
    Dim a As Integer
    Dim AnalogStrg As Variant
    Dim Kla As String
    Dim KlaID As Integer
    Dim LiBoS2 As String
    Dim LiBoS3 As String
    Dim LiBoS4 As String
    Dim n As Integer
    Dim nType As Byte
    Dim RgO As Range
    Dim TBS As String
    Dim usedS As Byte
    Dim v As Byte
    Dim VOS2 As Byte
    Dim VOS3 As Byte
    Dim VOS4 As Byte
    n = 0
    nType = Len(SuBe)
    VOS2 = Left(VisOpt, 1)
    VOS3 = Mid(VisOpt, 2, 1)
    VOS4 = Right(VisOpt, 1)
    Application.ScreenUpdating = False
    Windows("SamLibriDat.xlsm").Activate
    Sheets(WS).Select
    ActiveSheet.Range(S & "4").Select
    objListBox.Clear
    For a = 1 To ActiveSheet.UsedRange.Rows.Count
    If Cells(ActiveCell.Row, 1) = "" Then Exit For
    If WS = "Bücher" Or WS = "Schüler" Then
    KlaID = Cells(ActiveCell.Row, 4)
    Kla = FUKreaKla(KlaID)
    End If
    If WS = "Schüler" Then
    If Cells(ActiveCell.Row, 1) = 1100 Then GoTo Sprung
    TBS = "Buch"
    usedS = ActiveCell.Column
    v = FUnBücher(usedS)
    If v > 1 Then TBS = "Bücher"
    End If
    If SuTec = 1 Then
    If SuBe  Left(Cells(ActiveCell.Row, S), nType) Then GoTo Sprung
    End If
    If SuTec = 2 Then
    Set RgO = Sheets(WS).Cells(ActiveCell.Row, S).Find(SuBe, lookAt:=xlPart)
    If RgO Is Nothing Then GoTo Sprung
    End If
    If SuTec = 3 Then
    If SuBe  Cells(ActiveCell.Row, S) Then GoTo Sprung
    End If
    LiBoS2 = Cells(ActiveCell.Row, 3) & " " & Cells(ActiveCell.Row, 2)
    If VOS2 = 2 Then LiBoS2 = Cells(ActiveCell.Row, 2) & " " & Cells(ActiveCell.Row, 3)
    Select Case VOS3
    Case 1
    LiBoS3 = "(" & Kla & ")"
    Case 2
    LiBoS3 = Left(Cells(ActiveCell.Row, 5), 4) & " (" & Kla & ") " & Right(Cells( _
    ActiveCell.Row, 5), 8)
    Case 3
    LiBoS3 = Cells(ActiveCell.Row, 7) & " / " & Cells(ActiveCell.Row, 6)
    Case 4
    LiBoS3 = Cells(ActiveCell.Row, 4)
    End Select
    Select Case VOS4
    Case 1
    LiBoS4 = "(" & Kla & ")"
    Case 2
    LiBoS4 = Left(Cells(ActiveCell.Row, 5), 4) & " (" & Kla & ") " & Right(Cells( _
    ActiveCell.Row, 5), 8)
    Case 3
    LiBoS4 = v & " " & TBS
    End Select
    With objListBox
    .AddItem ""
    .List(n, 0) = Cells(ActiveCell.Row, 1)
    .List(n, 1) = LiBoS2
    .List(n, 2) = LiBoS3
    .List(n, 3) = LiBoS4
    n = n + 1
    Sprung:
    ActiveCell.Offset(1, 0).Select
    Next a
    On Error Resume Next
    objListBox.Selected(0) = True
    ActiveSheet.Range("A1").Select
    Sheets("Start").Select
    Windows("SamLibri.xlsm").Activate
    Application.ScreenUpdating = True
    End Sub
    
    Ganz schön viel gell. Sorry, aber ganz herzlichen Dank fürs durchlesen und fürs beantworten.
    Liebe Grüße
    Rainer.

  • Anzeige
    AW: Objektvariable
    17.10.2015 19:08:07
    Sepp
    Hallo Rainer,
    soll ich jetzt deine Datei nachbauen, um deinen Code ausprobieren zu können?
    das kann so nicht funktionieren
    
    With UFoX
    .LiBoAfill(S, SuBe, SuTec, VisOpt, WS).LiBoA
    End With
    
    Ungeachtet, ob er Code sonnst noch Fehler enthält, sollte das wohl so lauten.
    
    With UFoX
    Call LiBoAfill(.LiBoA, S, SuBe, SuTec, VisOpt, WS)
    End With
    
    Wobei LiBoAfill() als Public in einem allgemeinen Modul stehen muss!
    Gruß Sepp

    Anzeige
    AW: Objektvariable
    17.10.2015 20:35:24
    Rainer
    Hallo Sepp,
    ja, ja, jaja jaaaaa! Es funktioniert. Vielen, vielen Dank. Ich musste nur noch ein paar Leichtsinnsfehler an meinem Code korrigieren und schon hab ich genau das was ich wollte. Ich habe wieder sehr viel gelernt. Vielen Dank.
    Liebe Grüße
    Rainer.

    Freut mich! o.T.
    17.10.2015 21:03:06
    Sepp
    Gruß Sepp

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige