VBA-Code für Excel erweitern?

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.


ChrisAlex2 
Beitragsersteller
 11.03.2023, 13:12

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

0
IchMalWiederXY  11.03.2023, 19:17
@ChrisAlex2

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

0
ChrisAlex2 
Beitragsersteller
 11.03.2023, 19:56
@IchMalWiederXY

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

0
ChrisAlex2 
Beitragsersteller
 14.03.2023, 10:08
@IchMalWiederXY

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

0
IchMalWiederXY  14.03.2023, 18:12
@ChrisAlex2

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.

0
IchMalWiederXY  26.03.2023, 20:17
@ChrisAlex2

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")

0
IchMalWiederXY  27.03.2023, 20:56
@ChrisAlex2

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.

0
ChrisAlex2 
Beitragsersteller
 28.03.2023, 19:08
@IchMalWiederXY

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

  1. 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.
  2. 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

0