Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


List Box
#1
Hallo zusammen,

ich bin dabei, mir einen Urlaubsplan zu bauen.

Nun möchte ich über meine Listbox (sie enthält die Werte UP,U,SU und JAZ) durch klick die Werte in die aktive Zelle ausgeben und die nächste Zelle soll aktiviert werden, so dass man durch mehrmaliges klicken auf z.B. U mehrere Zellen befüllen kann . Der erlaubte Bereich soll sein: Arbeitsblatt 2015( J1:NK200).

mit einer zweiten Listbox genannt löschen sollen die Werte aus der aktiven Zelle wieder gelöscht werden können

So sieht es bisher aus;

Code:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
With ListBox1
     If .Selected(.ListIndex) = True Then ActiveCell.Value = .List(.ListIndex)
End With
Application.SendKeys "{TAB}", True
ActiveCell.Select

For i = 0 To ListBox1.ListCount - 1
     ListBox1.Selected(i) = False
Next i
End Sub



Private Sub cmdWeiter_Click()
Könnt ihr mir hier bitte helfen?

Vielen Dank
Code:
'schließt das Formular Eingabe'

    Unload Me

End Sub
to top
#2
Hallo Mario,

die aktive Zelle kannst Du z.B. so weitersetzen:

ActiveCell.Offset(1,0).activate

PS: habe mal die code-Tags in Deinem Beitrag korrigiert.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Mario
to top
#3
Hallo Mario,

wo hast Du den eingestellten Code her?

Also hier braucht man auf keinen Fall mit SedKeys zu arbeiten (sollte grundsätzlich vermieden werden)
Dann brauchst Du auch keine Schleife um die Auswahl der Listbox zu identifizieren.
Bei Auswahl hast Du einen Listindex >0 , und der Listindex gibt Dir an, welche Auswahl getroffen wurde.

Deinen Code kann insgesamt so zusammenfassen:

Code:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

   With ListBox1
      If .ListIndex > -1 Then        'erstes Element hat den Index 0, keine Auswahl bedeutet Index -1
         ActiveCell.Value = ListBox1.Value '.List(.ListIndex)
         ActiveCell.Offset(0, 1).Select        'die Zelle in gleicher Zeile (0=kein Versatz in Zeile) eine Spalte weiter(1=eine Spalte Versatz nach rechts)
         .ListIndex = -1
      End If
   End With

End Sub

Ich habe da ein paar Kommentare rein geschrieben, so dass Du ihn besser nachvollziehen kannst.
Und damit das alles nur in Deinem angegebenen Bereich passiert, muss das etwas ausführlicher codiert werden. Das ginge zum Beispiel so:

Code:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim LngZ As Long, lngS As Long, lngAZ As Long, lngAS As Long
Dim rngBereich As Range
Set rngBereich = Range("J1:NK200")
lngAZ = ActiveCell.Row
lngAS = ActiveCell.Column
LngZ = rngBereich.Rows.Count
lngS = rngBereich.Columns.Count + 9
   With ListBox1
      If .ListIndex > -1 Then        'erstes Element hat den Index 0, keine Auswahl bedeutet Index -1
         If Not Intersect(ActiveCell, rngBereich) Is Nothing Then 'wenn eine Zelle im benannten Bereich ausgewählt dann
            If lngAS <= lngS - 1 Then
               ActiveCell.Value = ListBox1.Value '.List(.ListIndex)
               ActiveCell.Offset(0, 1).Select        'die Zelle in gleicher Zeile (0=kein Versatz in Zeile) eine Spalte weiter(1=eine Spalte Versatz nach rechts)
               .ListIndex = -1      'Auswahl der listbox aufheben
            Else
               If lngAZ < LngZ Then
                  ActiveCell.Value = ListBox1.Value '.List(.ListIndex)
                  ActiveCell.Offset(1, -lngS + 10).Select      'nächste Zeile erste Spalte
                  .ListIndex = -1      'Auswahl der listbox aufheben
               Else
                  ActiveCell.Value = ListBox1.Value '.List(.ListIndex)
                  Cells(rngBereich.Row, rngBereich.Column).Select   'erste Zeile erste Spalte im benanten Bereich
                  .ListIndex = -1      'Auswahl der listbox aufheben
               End If
            End If
         Else
            MsgBox "Du befindest Dich außerhalb des gültigen Bereichs!"
         End If
      End If
   End With
End Sub

So wirst Du immer im benannten Bereich rumgeschickt.

Was das löschen Betrifft, ist es nicht sehr Sinnvoll mit der Listbox zu arbeiten.
Theoretisch könntest Du noch ein Sonderzeichen in die Listbox platzieren, welches für das Löschen steht.
Bei Auswahl dieses Zeichens kann dann der Inhalt der aktiven Zelle gelöscht werden.
Das kann man leicht in die eingestellten Codes einarbeiten.

Andere Möglichkeit, Du nutzt ein Event der Tabelle, beispielsweise das Doppelklick Ereignis (Worksheet_BeforeDoubleClick).
Bei Doppelklick würde dann der Inhalt gelöscht.
Gruß Atilla

Excel 2007
[-] Folgende(r) 1 Benutzer sagt Danke an atilla für diesen Beitrag:
Mario
to top
#4
Hallo Andre,

vielen Dank an dich.

Hallo Atilla,

habe es sofort getestet.

Den Code muss ich ja in das entsprechende Tabellenblatt (also bei mir 2015) kopieren.
Dann funktioniert der Aufruf aber nicht per Doppelklick auf eine aktive Zelle nicht.

Habe es mal in das Modul kopiert, hier bekomme ich leider die Fehlermeldung:

1.If .ListIndex > -1 Then 'erstes Element hat den Index 0, keine Auswahl bedeutet Index -1

Hier bekomme ich folgenden Fehler: Laufzeitf. 424 Objekt erforderlich.

Hierzu muss ich sagen, dass ich die Listbox in der Userform (frmaUrlaub) habe.
Spielt ja eventuell eine Rolle.

Wenn du so nett wärst und nochmal drüber schauen könntest, wäre ich dir sehr dankbar.

Danke und VG Mario
to top
#5
Hallo Mario,

Zitat:Den Code muss ich ja in das entsprechende Tabellenblatt (also bei mir 2015) kopieren.
Dann funktioniert der Aufruf aber nicht per Doppelklick auf eine aktive Zelle nicht.

nein, für das Doppelklick Ereignis habe ich keinen Code eingestellt. Das war nur ein Vorschlag.

Der eingestellte Code gehört ins Code Modul der Userform.
Du musst Deinen eingestellten Code hinter der Userform löschen und eins von meinen hinein kopieren.
Gruß Atilla

Excel 2007
[-] Folgende(r) 1 Benutzer sagt Danke an atilla für diesen Beitrag:
Mario
to top
#6
Hallo Atilla,

ich habe es hinbekommen, habe die ListIndex raus genommen und es funktioniert einwandfrei.

Danke dir du bist mein Held 18

Eventuell kannst du mir ja bei meinem anderen kleinen Problem auch helfen?

In dem Dateiblatt Urlaub sollen alle Urlaube (U) der Mitarbeiter eingetragen werden.
Das Datum steht in den Spalten A1:NK1. Der zulässige Bereich in den eingetragen wird J5:NK200. Nun habe ich es schon hinbekommen, dass alle Wochenenden und Feiertage farbig sind (beim Jahreswechsel übernimmt Excel automatisch die farbliche Markierung).

Nun habe ich folgende Herausforderung:

Ich möchte die eingetragenen Urlaubstage (sind mit U eingetragen) addieren und das Ergebnis soll in der Spalte i dargestellt werden. Allerdings sollen hier die Urlaubs und Feiertage nicht mitgerechnet werden.

VG Mario
to top
#7
Hallo Mario,

da komm ich jetzt nicht ganz mit:

Zitat:Ich möchte die eingetragenen Urlaubstage (sind mit U eingetragen) addieren und das Ergebnis soll in der Spalte i dargestellt werden. Allerdings sollen hier die Urlaubs und Feiertage nicht mitgerechnet werden.
Willst Du die Urlaubstage zeilenweise oder insgesamt? Zählen kannst Du einfach mit ZÄHLENWENN(Bereich;Suchkriterien)
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Mario
to top
#8
Hallo Andre,

danke für deine schnelle Hilfe.
Ich möchte dies Zeilenweise auslesen. Habe mir bereits eine Formel gebastelt. Dies funktioniert auch bei den Wochenenden, aber leider nicht bei den Feiertagen.

=SUMMENPRODUKT((J5:NK5="U")*(WOCHENTAG($J$1:$NK$1;11)<6)*(ISTFEHLER(VERGLEICH($J$1:$NK$1;Feiertage;0) ))*1)

Wie gesagt sollen die Wochenenden und die Feiertage nicht mit berechnet werden.

VG Mario
to top
#9
Hi Mario,

(10.12.2014, 16:42)Mario schrieb: Ich möchte die eingetragenen Urlaubstage (sind mit U eingetragen) addieren und das Ergebnis soll in der Spalte i dargestellt werden. Allerdings sollen hier die Urlaubs und Feiertage nicht mitgerechnet werden.

Du willst also Du die Urlaubstage zusammenzählen ohne Urlaub?

Meintest Du Wochenende?
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#10
Hallo Mario,

warum trägst Du denn an den Wochenenden Urlaub ein?

Wo stehen denn Deine Feiertage? Bei mir funktioniert Deine Formel. Ich habe die Feiertage auf das Excelblatt eingegeben, den Bereich entsprechend benannt und gut ...
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Mario
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste