Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Event bei Enter in einer Zelle auslösen

Begonnen von Hondo, September 28, 2024, 12:47:25

⏪ vorheriges - nächstes ⏩

Hondo

Hallo,
habe eine Excel-Datei wo ich Brutto-Werte eingebe, und in einer Spalte habe ich die MwSt Beträge 19% und 7% und ich möchte wenn ich in der Zelle für z.B. 19% bin und Enter drücke dass automatisch der MwSt Betrag errechnet und in die Zelle eingetragen wird, und in der gleichen Zeile in die Zelle X gesprungen wird.

Ist sowas mit Excel 2010 lösbar? Wenn ja wie?
Gruß Andreas

knobbi38

Hallo Andrea,

möchtest du jetzt wissen, wie die Formel zur Berechnung des MwSt. Betrages aus dem Bruttopreis ist?
Ansonsten empfehle ich die Seite
https://www.online-excel.de/index.php
mit seinen Tutorials.

Hondo

Zitat von: knobbi38 am September 28, 2024, 13:13:50möchtest du jetzt wissen, wie die Formel zur Berechnung des MwSt. Betrages aus dem Bruttopreis ist?

Ne natürlich nicht, wie kann ich das Event "Bei Enter Taste" auslösen? Weil eben nicht immer z.B: 19% MwSt. anfallen, sondern nur fallweise.
Gruß Andreas

Hondo

Hallo,
ich habe mal ein Beispiel hier heruntergeladen:
https://www.excel-inside.de/download-news/download-beispiele-tools
Es ist das Angebots- und Rechnungstool.

Auf der Seite geb.Rechnung gibt es die Spalte RE offen?.
Wie zur Hölle funktioniert das?
Also dass jedes Feld in dieser Spalte ein unsichtbares Dropdown hat, das erst beim klicken in der aktiven Celle erscheint?

Gruß Andreas

Debus

Hey, zum einen kann man das mit VBA machen, aber es geht auch einfacher


Erstelle eine Liste mit den Werten für deine Dropdown-Liste in einem Bereich (z.B. C1:C5).


Wähle die Zelle aus, in der du die Dropdown-Liste erstellen möchtest (z.B. A1).


Gehe zu Daten > Datenüberprüfung.
Wähle unter ,,Zulassen" die Option ,,Liste".

Gib im Feld ,,Quelle" den Bereich ein, der deine Liste enthält (z.B. =$C$1:$C$5).
Klicke auf ,,OK".

Holger


Hondo

Hallo, danke, das hab ich gestern spät Abends auch noch herausgefunden  :)
Hilft jetzt imo nur bedingt erstmal, weil ich ja den Wert überschreiben möchte.
Hab mir jetzt erst mal so geholfen dass ich in einer neuen, sehr schmalen Zelle das Dropdown eingefügt habe, und dann per Button den Wert rechne und in die Zelle davor eintrage. Nicht optimal, aber ich weiß aktuell nicht wie ich das Selection-Event des Dropdowns in VBA umsetzen kann.

Gruß Andreas

Debus

Hallo Hondo,

hiermal ein Versuch:

1. Einen direkten "Enter2 Event zu einer Zelle gibt es nicht! (zu mindestens meines Wissens) daher musst Du folgendes nehmen:

Zitat: aus einem Buch: Das Worksheet_Change-Ereignis wird ausgelöst, wenn eine Zelle in einem Arbeitsblatt geändert wird. Wenn Du also einen Wert in eine Zelle eingibst und dann Enter drückst, wird dieses Ereignis aktiviert.

Hier mal ein Code:

Wenn in der Zelle A3 sich etwas geändert hat, dann wird in der Zelle A1 die Berechnung mit dem Wert aus A3 durchgeführt, das Event geht auf alle Zelle!!:

Private Sub Worksheet_Change(ByVal Target As Range)
   
    If Not Intersect(Target, Me.Range("A3")) Is Nothing Then
       
        Me.Range("A1").Value = Me.Range("A3").Value * Me.Range("A3")

    End If
End Sub

Nur auf die Schnelle aber so solltest Du weiter kommen

Holger



Hondo

#7
Hallo,
das hat mir schon sehr weitergeholfen, danke. Mein Code sieht jetzt wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim brutto As Variant
    Dim mwst As Double

    brutto = ActiveSheet.Range("C" & ActiveCell.Row).Value
    'ohne Brutto-Wert keine Berechnungen
    If Not IsNumeric(brutto) Or IsEmpty(brutto) Then Exit Sub

    LastRow = ActiveCell.Row
    LastCol = ActiveCell.Column
   
    If LastCol > 8 Then Exit Sub

    Select Case LastCol
        Case 4, 6: '19%, 7%
            Cells(LastRow, LastCol + 1).Select
            SendKeys ("%{Down}")
        Case Else
            If Not Intersect(Target, Me.Range(RowAlpha(LastCol) & LastRow)) Is Nothing Then
                If Target = "JA" Then
                    mwst = IIf(LastCol = 5, 1.19, 1.07)
                    Me.Range(IIf(LastCol = 5, "D", "F") & LastRow).Value = Round(brutto - brutto / mwst, 2)
                    Me.Range(IIf(LastCol = 5, "E", "G") & LastRow).Value = ""   'Auswahl löschen
                    Cells(LastRow, 9).Select
                ElseIf Target = "NEIN" Then
                    Cells(LastRow, 6).Select
                    Me.Range(IIf(LastCol = 5, "D", "F") & LastRow).Value = ""
                Else    '...
                End If
            End If
    End Select
End Sub

in einem Modul hab ich diesen Code noch:
Public LastRow As Long
Public LastCol As Long

Public Function RowAlpha(ByVal xRow As Long) As String
    Dim rowlist As Variant
    rowlist = Array("", "A", "B", "C", "D", "E", "F", "G", "H")
    RowAlpha = rowlist(xRow)
End Function

Das funktioniert jetzt mal soweit. Muss es noch für 9% MwSt. anpassen aber das ist kein Problem.
Gruß Andreas

knobbi38

Hallo Andreas,

das entspricht nicht ganz dem, was Holger (#6) vorgeschlagen hat. Als erstes solltest du vor allem anderen Target überprüfen, ob sich im relevanten Bereich etwas geändert hat. Erst wenn das postitiv ist, werden dann im THEN Zweig die Berechnungen und Auswertungen vorgenommen. Mit Target kommst du auch an die Informationen Sheet,Row,Column heran, so daß du auf die Active...-Varianten verzichten kannst. Auch solltest du Sendkeys() nicht verwenden; in den meisten Fällen wird das nicht benötigt und macht nur Probleme.

Gruß Ulrich



Hondo

Hallo Ulrich,
ne das passt so.
Ich habe folgende Zellen: lfdNr, Datum, Brutto, 19%MwSt, 1. Dropdown, 7%MwSt, 2. Dropdown, Herkunft, Bezeichnung.
ich gebe das Datum ein, drücke TAB
gebe das Brutto ein, drücke TAB, und dann soll aber die ausgewählte Zelle auf den 1. Dropdown springen und der Dropdown soll sich öffnen. Daher das Case 4, 6.
Erst danach ist es relevant was für ein Target im Dropdown steht.
Wenn du mir sagst wie ich ohne Sendkeys das Dropdown öffnen kann verzichte ich gerne darauf.

Gruß Andreas

Debus

@ Ulli,

Du hast natürlich Recht und SendKeys ist das schlechteste was man machen kann, aber um die Dropdownliste zu öffnen sehe ich auch keine andere Möglichkeit. Mit dem Rest aus #8 hast Du natürlich auch recht. Aber wenn Du eine andere Lösung für das aufklappen der Dropdownliste hast, dann würde die mich auch interessieren.

Gruß
Holger

knobbi38

#11
@ Andreas, Holger:

Das scheint tatsächlich einer der wenigen Fälle zu sein, wo es zu Sendkeys keine Alternative gibt, jedenfalls sehe ich keine Möglichkeit, per IAccessible-Schnittstelle oder UIAutomation an diese DropDown-Validierung zu gelangen.
Um jedoch das Problem mit VBA.SendKeys in Verbindung mit NumLock zu umgehen, kann eine API-Version gewählt werden:
https://www.classicvb.net/samples/SendInput/

Hallo Andreas,

mit einem anderen Aufbau der Tabelle kannst du dir den ganzen Aufwand schenken. Anstatt 2 DropDowns mit JA/NEIN zu verwenden, würde eine mit dem MwSt.-Satz reichen. Die Berechnung kann dann per Formel erfolgen, ganz ohne VBA.
Zweimal JA/NEIN Auswählen zu müssen, wäre mir als Anwender viel zu umständlich.

Gruß Ulrich



Hondo

Hallo Ulrich,

Zitat von: knobbi38 am September 30, 2024, 21:49:33Anstatt 2 DropDowns mit JA/NEIN zu verwenden, würde eine mit dem MwSt.-Satz reichen. Die Berechnung kann dann per Formel erfolgen, ganz ohne VBA.

Ne bringt auch nichts, weil ich tu ja Einkaufsbelege fakturieren. Und auf einem Beleg können verschiedene Positionen sein mit einmal 19% und auch mit 7%. Oder landwirtschaftlicher Einkauf zu 9% auch möglich. (Honig, Eier/Nudeln etc.) Und da ich in der Umsatzsteuererklärung bzw. -Voranmeldung Ausgaben nach MwSt-Satz angeben muss ist das zwingend getrennt zu halten.

Spielt auch keine Rolle, der Anwender bin ja ich selbst.
Gruß Andreas


knobbi38

Zitat... ist das zwingend getrennt zu halten.
Ja schon, aber über die DropDown-Liste kannst du doch alle Steuersätze auswählen und somit auch für jede Belegposition getrennt erfassen. Das eine Belegposition zweit Steuersätze haben könnte, wäre mir neu.

Man sollte sich schon an gewisse Regel halten und die Regeln für die Datenmodellierungen gelten nicht nur für Datenbanken/Tabellen, sondern können auch für Excel angewendet werden (Stichwort: Normalisierung). Das erleichtert auf jeden Fall die weitere Verarbeitung. Ein Datensatz mit den Feldern 19% = JA/NEIN, 7% = JA/NEIN und 9% = JA/NEIN ist nach diesen Regeln denormalisiert und dann sollte man die Tabelle schon nochmal überarbeiten!

Gruß
Ulrich

Hondo

Zitat von: knobbi38 am Oktober 01, 2024, 15:30:14auch für jede Belegposition getrennt erfassen.
Die Positionen werden nicht getrennt erfasst. Sondern der komplette Beleg in einer Zeile.
Daher bräuchte ich dann für jede MwSt-Satz ein Dropdown.
Außerdem muss ich bei gemischtem Steuersatz die jeweilige MwSt. händisch eintragen.

Das ist schon gut so wie ich das jetzt gelöst habe.
Gruß Andreas