tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1016
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Jako Jako ist offline Grünschnabel
    Registriert seit
    Sep 2010
    Beiträge
    3
    Hallo,
    VBA ist nicht wirklich mein Ding. Habe nur ab und zu Kleinigkeiten damit gemacht. Meine Vorstellung wäre, eine Umfrage mittels Excel zur Nutzung von EDV zu erstellen. Die Nutzer sollen dabei nicht die Zellen direkt anklicken, sonder über ein Userform geleitet werden. Eine ComboBox in der Userform enthält die Werte aus der Tabelle Spalte B (hab ich hinbekommen - aber Leerzeilen sind noch drin!). Bei Auswahl des entsprechenden Eintrages springt die Maus in die Zelle mit dem entsprechenden Wert in Spalte B. Dann kann der Nutzer über Optionsfelder in der Userform angeben, ob vorhanden, nicht vorhanden und falls nicht vorhanden, ob gewünscht. Diese Werte werden entsprechend hinter den Eintrag in Spalte C, D und E hinterlegt. Am liebsten wäre mir sogar, wenn ich statt Text Kontrollkästchen für ein "Ja" hinterlegen aktivieren könnte. Ebenso soll der Nutzer nach Häufigkeit der Nutzung abgefragt werden, wenn die EDV vorhanden oder gewünscht.
    Die Datei hänge ich mal eben an.
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Keine Ahnung wie deine Lösung bis jetzt aussieht. Ich habe mal was in Excel 2000 versucht:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    Private Sub Button_Click()
    If Liste.ListIndex = -1 Then
        MsgBox "Kein Eintrag ausgewählt", vbOKOnly, "Fehler"
        Exit Sub
    End If
     
    zeile% = Liste.ListIndex + 2
     
    Cells(zeile%, 2) = IIf(opVorhanden.Value = True, "Ja", "Nein")
    Cells(zeile%, 3) = IIf(opNichtVorhanden.Value = True, "Ja", "Nein")
    Cells(zeile%, 4) = IIf(opErwünscht.Value = True, "Ja", "Nein")
    End Sub
     
    Private Sub UserForm_Activate()
    zeile% = 2
    Do While Cells(zeile%, 1) <> ""
        Liste.AddItem Cells(zeile%, 1)
        zeile% = zeile% + 1
    Loop
    End Sub

    Die UserForm hat ein Listenfeld mit Name "Liste", Optionsbuttons mit Namen "opVorhanden"; "opNichtVorhanden" und "opErwünscht" und einen Button mit dem Namen "Button"

    Wird auf den Button geklickt, wird zuerst geprüft ob überhaupt etwas ausgewählt wurde und wenn ja werden die Werte der Optionsbutton mit Hilfe der IIF-Funktion in "Ja" oder "Nein" umgewandelt und in die entsprechende Zellen eingetragen.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Jako Jako ist offline Grünschnabel
    Registriert seit
    Sep 2010
    Beiträge
    3
    Vielen Dank für die Hilfe.
    Habe allerdings zum Füllen der Listbox einen anderen Code verwendet. Mit deinem wurden nur die ersten Zeilen meiner Liste gefüllt. Oder ich habe was vergessen.

    Habe jetzt aber das Problem, dadurch, dass die Leerzeilen nicht geladen werden, die Werte der Optionsfelder in die falschen Zeilen geschrieben werden. Wie bekomme ich das raus?

    Gibt es weiterhin eine Möglichkeit, dass der Nutzer des Formulars gleich mehrere Listbox-Einträge mit einem Mal erfassen kann? Dazu müßte allerdings der Wert, der in den Optionsfeldern angeklickt wird zu jedem Indexeintrag sofort hinterlegt werden, noch bevor der Nutzer auf "Auswahl speichern" klickt. Die Optionsfelder müßten demnach von Auswahl zu Auswahl der Listbox wieder geleert und mit jedem neu gewählten Eintrag neu befüllt werden. Gut wäre auch, wenn bereits bearbeitete Einträge markiert wären damit der Nutzer sieht, welche er schon befüllt hat. Kriegt man so was hin oder ist das zu umständlich?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    Private Sub ButtonHardware_Click()
    'Prüft ab, ob ein Feld in der ListeHardware gewählt wurde, sonst Fehlermeldung
     
    If ListeHardware.ListIndex = -1 Then
        MsgBox "Kein Eintrag ausgewählt", vbOKOnly, "Fehler"
        Exit Sub
    End If
     
    'Schreibt die Werte der Optionsbutton in die entsprechenden Zellen hinter der Hardwareauswahl
     
    Zeile% = ListeHardware.ListIndex + 11
     
    Tabelle4.Cells(Zeile%, 2) = IIf(opVorhanden.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 3) = IIf(opErwünscht.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 6) = IIf(opTäglich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 8) = IIf(opWöchentlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 10) = IIf(opMonatlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 12) = IIf(opHalbjährlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 14) = IIf(opNie.Value = True, "Ja", "Nein")
     
     
    End Sub

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    Private Sub UserForm_Initialize()
    Dim Zeile As Long
    opVorhanden.GroupName = "Vorhanden"
    opErwünscht.GroupName = "Vorhanden"
    opVorhandenSoft.GroupName = "VorhandenSoft"
    opErwünschtSoft.GroupName = "VorhandenSoft"
     
    'Füllt die Harwareliste
     
    With ListeHardware
        .MultiSelect = fmMultiSelectExtended
        .ListStyle = fmListStyleOption
        End With
    For Zeile = 11 To 48
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then _
        ListeHardware.AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1)
    Next
     
    'Füllt die Softwareliste
     
    With ListeSoftware
        .MultiSelect = fmMultiSelectExtended
        .ListStyle = fmListStyleOption
        End With
    For Zeile = 52 To 78
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then _
        ListeSoftware.AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1)
    Next
     
    End Sub
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Userform zur Abfrage eines Auswertungsbogens in Excel-index-nr..pdf  
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Habe jetzt aber das Problem, dadurch, dass die Leerzeilen nicht geladen werden, die Werte der Optionsfelder in die falschen Zeilen geschrieben werden. Wie bekomme ich das raus?
    Erstelle eine zweite Spalte in der Liste und trage hier beim Einlesen der Werte die jeweilige Zeilennummer der Tabelle ein.

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    
    If Cells(a%, 1) <> "" Then
        With ListBox1
            .AddItem Cells(a%, 1)
            .Column(1, b%) = a%
        End With
        b% = b% + 1
    End If

    Im Beispiel wird einfach wieder mit einer Schleife die Tabelle durchlaufen und die Werte in die Liste eingetragen. a% ist der "Zeilenzähler", b% zählt die Einträge in der Liste.

    Bestimmte Einträge farbig oder sonst wie zu markieren ist meines Wissens nach nicht möglich.
    Eine Lösung um gleich mehrere Werte mit einem Klick zu übernehmen fällt mir gerade auch nicht ein. Halte es aber auch nicht unbedingt für gut. Da könnte so einiges durcheinander geklickt werden.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    Jako Jako ist offline Grünschnabel
    Registriert seit
    Sep 2010
    Beiträge
    3
    Vielen Dank für deine ausdauerende Hilfe Also irgendwie stell ich mich ein wenig dämlich an... Soll ich eine zweite Spalte in meiner Excel-Liste erstellen oder nur für meine ListBox? Hatte das so verstanden, dass ich die Excel-Liste erweitern soll. Und wie bastel ich deinen Code nun bei mir rein? Funktioniert bei mir irgendwie nicht.
    Entweder hier?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    Private Sub UserForm_Initialize()
    Dim Zeile As Long
    opVorhanden.GroupName = "Vorhanden"
    opErwünscht.GroupName = "Vorhanden"
    opVorhandenSoft.GroupName = "VorhandenSoft"
    opErwünschtSoft.GroupName = "VorhandenSoft"
     
    'Füllt die Harwareliste
    With ListeHardware
        .MultiSelect = fmMultiSelectExtended
        .ListStyle = fmListStyleOption
        End With
    For Zeile = 11 To 48
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then _
        ListeHardware.AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1)
    Next
     
     
    'Füllt die Softwareliste
     
    With ListeSoftware
        .MultiSelect = fmMultiSelectExtended
        .ListStyle = fmListStyleOption
        End With
    For Zeile = 52 To 78
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then _
        ListeSoftware.AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1)
    Next
     
    End Sub

    oder hier?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    Private Sub ButtonHardware_Click()
    'Prüft ab, ob ein Feld in der ListeHardware gewählt wurde, sonst Fehlermeldung
     
    If ListeHardware.ListIndex = -1 Then
        MsgBox "Kein Eintrag ausgewählt", vbOKOnly, "Fehler"
        Exit Sub
    End If
     
    'Schreibt die Werte der Optionsbutton in die entsprechenden Zellen hinter der Hardwareauswahl
     
    Zeile% = ListeHardware.ListIndex + 11
     
    Tabelle4.Cells(Zeile%, 3) = IIf(opVorhanden.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 4) = IIf(opErwünscht.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 6) = IIf(opTäglich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 8) = IIf(opWöchentlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 10) = IIf(opMonatlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 12) = IIf(opHalbjährlich.Value = True, "Ja", "Nein")
    Tabelle4.Cells(Zeile%, 14) = IIf(opNie.Value = True, "Ja", "Nein")
     
     
    End Sub
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Das müsste bei dir der Teil sein wo die Liste gefüllt wird:

    Code vb:
    1
    2
    3
    4
    
    For Zeile = 11 To 48
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then _
        ListeHardware.AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1)
    Next

    Das änderst du dann so mal ab:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    For Zeile = 11 To 48
        If Sheets("EDV-Mittel-Erfassung").Cells(Zeile, 1) <> "" Then
            With ListeHardware
                .AddItem Sheets("EDV-Mittel-Erfassung").Cells(Zeile,  1)
                .Column(1, b%) = Zeile
            End With
            b% = b% + 1
        End If
    Next

    Beim Listenelement gibt es eine Eigenschaft "ColumnCount", diese steht bei dir auf 1. Hier musst du eine 2 daraus machen. Das meinte ich mit der zweiten Spalte.
    Hier wird dann immer die Zeilennummer aus der Tabelle eingetragen.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

Ähnliche Themen

  1. UserForm in Excel variabel aufrufen
    Von Matschlag im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 13.11.08, 16:02
  2. ODBC Abfrage in Excel Userform
    Von Lametta 17 im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 27.08.08, 16:07
  3. Antworten: 1
    Letzter Beitrag: 26.06.08, 12:41
  4. Excel-Tab via UserForm füllen
    Von manthom im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 19.02.08, 20:10
  5. Userform von VB in Excel starten
    Von Imailer im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 04.07.05, 14:43