VBA-Code für Excel erweitern?
Hallo,
folgender Sachverhalt: In meiner Excel-Datei habe ich in Zelle A10 ein Datum stehen. In der Regel ist es der 01. Januar(Abweichungen möglich). In den Zellen B10-J10 stehen Daten. Nach betätigen der Enter-Taste soll in die Zelle A11 gesprungen werden. Dazu habe ich folgenden Code in einer Beispielmappe im Netz gefunden:
Sub EnterOnOff(Optional bolOn As Boolean)
If bolOn Then
Application.OnKey "{ENTER}", "NaechsteZeileEinblenden" 'EINGABETASTE (Zehnertastatur)
Application.OnKey "~", "NaechsteZeileEinblenden" 'EINGABETASTE
Else
Application.OnKey "{ENTER}" 'EINGABETASTE (Zehnertastatur)
Application.OnKey "~" 'EINGABETASTE
End If
End Sub
Private Sub NaechsteZeileEinblenden()
With ActiveCell.Offset(1).EntireRow
.Hidden = False
.Cells(1).Activate
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target.Cells(1)
EnterOnOff .Column = 10 And .Row > 9
End With
End Sub
Das funktioniert auch soweit. Nun möchte ich gerne, das Excel mir nach betätigen der Enter-Taste das nächste Datum in Zelle A11. Entsprechendes gilt natürlich fortlaufend.
Hat jemand ne Idee oder gar ne Lösung für mich?
Gruß Chris
1 Antwort
Wenn man "Enter" Drückt rutsch man doch automatisch eine Zeile tiefer, es sei denn man hat in den Excel Optionen den Standard auf etwas eigenes umgestellt.
Soll das Datum in A11 eintragen ? Soll es einen Tag "mehr"' wie in A10 sein ?
A11 = A10 +1 ' Sofern A11 UND A10 als Datum formatiert ist hast du automatisch einen Tag später in A11.
Aber: Zur Vereinfachung würde ich Die WorksheetOnChange bzw SelectionChange verwenden.
Dort hast du automatisch die Zeile, Spalte in welche Dinge passiert sind und kannst ausgehend von dort dann abhängige Dinge anstoßen.
Genau. Wenn man in einer Zelle 'ankommt wird das SelectionChange geworfen. dann kann man in genau diesem Moment Dinge tun.
Aber Achtung. Schreib man nun einen neuen Inhalt in diese Zelle wird direkt danach das Worksheet_Change eworfen. Dies mus man dann verhindern.
Application.EnableEvents = false
'Update Code
Application.EnableEvents = True
Ich werde das nachher, wenn ich Feierabend habe, direkt testen. Nur weiß ich immer noch nicht, wie ich es Excel per VBA mitteile, das er in die aktive Zelle das Datum+1 schreibt. Mit A10+1 funktioniert das nicht, weil das ja z.B von A14 nach A15 dann nicht klappt
Ich hab jetzt hin und her probiert, hab mir nen Makro aufgezeichnet, wie es aussehen soll, aber das passt hinten und vorne nicht. Und wenn ich ganz ehrlich bin, die Bruchstücke, die bekomme, verwirren mich zur Zeit(beruflich bedingt) eher als dass sie mir helfen.
Gruß Chris
mmhh mag sein.
Aber auch wir haben nur ein BruchStück.
Die Tabelle selbst mit dem Aufbau ist nicht zu sehen.
Eine Zeile einblenden/ausblenden hinzufügen abhängig von der aktuellen Position ist eigentlich ein "Einzeiler"
Daher ggf nochmal ganz anders an das Vorhaben ran gehen.
kann man nicht. ggf einen der Experten als "Freund" antriggern, dann eMail Adressen austauschen...(Ich mache da aber nicht mit. andere haben aber sehr viele "Freunde")
So geht´s auch, hoffe ich mal https://www.herber.de/bbs/user/158456.xlsm
Also:
Alles soll passieren wenn sich in der Zeile: 10 etwas GEÄNDERT hat.
Dieses Event
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
wird immer dann angesprungen wenn sie tatsächlich etwas ändert in einer Zelle.
Es gilt also die Bereiche einzuschränken, wann man dort landet.
If Target.Row = 10 Then 'muss noch als Einschränkug ergänzt werden.
If Target.Column = 1 then ' Hier verändert sich das Datum. Dann abhängig die Liste für A8 verändern. Dies macht man mit "abhängigen DropDown" Suche in meinen GuteFrage Antworten.
In "O" nach unten laufen mit dem select
If Target.Column < 15 Then
Cells(Target.Row, Target.Column + 1).Select
Else
Cells(Target.Row + 1, 1).Select
End If
Warum, welche Zeile versteckt wird ist mir nicht klar. Hier einen Code vorzuschlagen wird daher Spekulation.
Das "Ausblenden" von Zeilen würde ich aber über einen kontrollierten Autofilter machen, anstatt Zeilen zu verstecken. Beim Start des WorkBooks
Private Sub Workbook_Open()
End Sub
könnte man prüfen in welchem Monat sich befindet und den Filter entsprechend setzen.
Generell ist dein Tabelle PIVOT tauglich.
Die Monats (Jahres, Tages, Person, etc) könnte also automatisch über PIVOT Berichte erfolgen, ohne jeden Mehraufwand.
Hallo,
das klingt alles sehr kompliziert. Habe mal in deinen Antworten nach "abhängigen DropDown" gesucht und bekomme folgendes als Antwort : IchMalWiederXY hat noch keine Antworten mit " "abhängigen DropDown"" geschrieben.
Ich habe ja eine Variante, die im Grunde funktioniert. Nur stören mich zwei Sachen. Hier mal der Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim lRowIn&, a&, lMonat&, dDatum As Date
On Error GoTo ende
Application.EnableEvents = False
Application.ScreenUpdating = False
'* bei Monatswechsel in A8
If Target.Address = "$A$8" Or Target.Address = "$A$8:$A$8" Then
lRowIn = Application.Match(Target.Value, Sheets("Hilfstabelle").Columns("D"), 0)
'* Sollstunden in M1 eintragen
Range("M1").Value = Sheets("Hilfstabelle").Range("E" & lRowIn).Value
ActiveSheet.Range("$A$8:$A$375").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(1, lRowIn & "/1/2023")
'Monat /Tag/Jahr
'* Sprung in Spalte B des Monatsersten des ausgewählten Monats
dDatum = DateSerial(Year([B2]), lRowIn, 1)
lRowIn = Application.Match(CLng(dDatum), Range("A1:A375"), 0)
Cells(lRowIn, 2).Select
End If
'* Wenn Enter-Taste in den Spalten A - N gedrückt wird
If Target.Column < 15 And Target.Row > 10 Then
Cells(Target.Row, Target.Column + 1).Select
End If
'* Wenn Enter-Taste in der Spalte O (=15) gedrückt wird
If Target.Column = 15 Then Target.Offset(1).EntireRow.Cells(2).Activate
ende:
Application.EnableEvents = True
End Sub
- alle 12 Monate sind mit dem jeweiligen Datum versehen. Wenn ich nu den Januar in A8 auswähle, wird mir der gesamte Monat angezeigt. Und das ist genau das, was ich nicht möchte. Es soll beim betätigen der Enter-Taste in Spalte O der nächste Tag eingeblendet werden. Erscheint z.B der 01.02 dann wähle ich in A8 den Februar aus und der Januar verschwindet ganz.
- Das mit der Enter-Taste hat funktioniert, bis ich Spalte I mit O vertauscht habe. Vorher wurde immer etwas in Spalte o eingetragen und somit ging das mit der Enter-Taste. Jetzt wird so gut wie gar nichts mehr eingetragen und ich muss einen Doppelklick in die Zelle machen und mit Enter abschliessen, dass der Cursor in Spalte B der nächsten Zeile springt.
Deine Idee hört sich schon interessant an, nur wüsste ich nicht ansatzweise, wie ich das umsetzen soll
Richtig, das Datum(A10+1) soll erst nach der Entertaste eingetragen, sobald zu A11 gesprungen wird. In dem Teil des Codes steht doch "SelectionChange". Oder wo meinst du?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target.Cells(1)
EnterOnOff .Column = 10 And .Row > 9
End With
End Sub
Gruß Frank