Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1704to1708
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Befehl gesucht

VBA Befehl gesucht
07.08.2019 16:20:30
Jörg
Hallo,
ich bräuchte Eure Hilfe. Und zwar habe ich in Spalte G eine Datenüberprüfung. Hier habe ich eine Liste hinterlegt mit einem festgelegten Datumsformat. Ich möchte, das Excel (bzw. der VBA Befehl) nachdem das Datum eingetragen wurde eine Messagebox erzeugt mit dem Hinweis "Reparatur eintragen" und in die Zelle rechts neben dem gerade vorgenommenen Datumseintrag springt. Wenn man versucht ohne Eintrag die Zelle zu verlassen soll die Messagebox wieder aufpoppen.
Ist das möglich?
VG
Jörg

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Befehl gesucht
07.08.2019 17:09:48
Sheldon
Hallo Jörg,
das ist so nicht umsetzbar. Bedenke, es ist in Excel möglich, mehrere der erforderlichen Einträge gleichzeitig zu löschen. Dadurch wird die Abarbeitung im Makro sehr schnell komplex. Daher würde ich von einem solchen Ansatz abraten. Was eher funktionieren wird, wäre die Datenüberprüfung. Das ist eine eingebaute Funktion in Excel, die z.B. nicht ausgefüllte Muss-Zellen hervorheben kann.
Datenüberprüfung
Gruß
Sheldon
AW: VBA Befehl gesucht
07.08.2019 17:13:09
mpb
Hallo Jörg,
das müsste mit einer Ereignisprozedur funktionieren, auch wenn mir noch nicht völlig klar ist, was du mit dem Satz "Hier habe ich eine Liste hinterlegt mit einem festgelegten Datumsformat." genau meinst.
Wechsle mal mit ALT-F11 ín die Entwicklungsumgebung, doppelklicke auf den Namen der gewünschte Tabelle und füge per Copy/Paste in das sich öffnende "Fenster" folgenden Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 Then
MsgBox "Reparatur eingetragen"
Target.Offset(0, 1).Select
End If
End Sub

Wenn in irgendeiner Zelle der Spalte G irgendetwas eingetragen wird (kann man noch näher eingrenzen), dann wird das ausgeführt, was du beschrieben hast.
Gruß
Martin
Anzeige
AW: VBA Befehl gesucht
07.08.2019 17:31:11
{Boris}
Hi,
ich würde in dem Fall dem Anwender eine Inputbox zur Verfügung stellen, die er nach der Datumsauswahl mit dem Text befüllen soll, der dann in die rechte Nachbarzelle eingetragen wird.
Den Bereich (hier: G2:G22) musst Du entsprechend anpassen.
Code kommt in das Klassenmodul der entsprechenden Tabelle:
Private Sub Worksheet_Change(ByVal Target As Range)
Const lngMindestLaenge As Long = 5 'So viele Zeichen muss der Reparatureintrag mindestens haben
Dim v As Variant
If Not Intersect(Target, Range("G2:G22")) Is Nothing Then
v = Application.InputBox("Reparatur eintragen", "Tu es bitte")
If v = False Or Len(v) 
VG, Boris
Anzeige
AW: VBA Befehl gesucht
08.08.2019 11:52:17
Jörg
Hallo Boris,
besteht vielleicht die Möglichkeit das Schließen der Box ohne Eintrag zu unterbinden? Sowas wie "Aktiviere OK erst wenn Eingabe X vorgenommen wurde"?
VG, Jörg
AW: VBA Befehl gesucht
07.08.2019 17:33:44
ChrisL
Hi Jörg
Alternativer Ansatz...
Mit bedingter Formatierung die leeren Zellen ins Spalte H rot leuchten lassen, wenn in G etwas steht
Bedingung:
=UND(G1<>"";H1="")
Wenn es unbedingt sein muss, kann man vor dem Speichern (BeforeSave) eine Konsistenzprüfung durchführen. Warnmeldung oder sogar das Speichern verhindern (Cancel=True), wenn etwas fehlt.
Kann aber ganz schön nervig sein, wenn man mal zwischenspeichern will. Zudem kann man die Datei auch immer ohne Aktivierung der Makros bearbeiten.
Nebenbei: Ist die Meldung "Reparatur eingetragen" sinnvoll? Wäre wie wenn du Excel öffnest und eine MsgBox erhältst "Sie haben gerade Excel geöffnet". ;)
cu
Chris
Anzeige
AW: VBA Befehl gesucht
08.08.2019 09:52:33
Jörg
Guten Morgen,
erst einmal vielen Dank für die vielen Antworten. Den Ansatz von mpb würde ich gerne nehmen.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 Then
MsgBox "Reparatur eingetragen"
Target.Offset(0, 1).Select
End If
End Sub
Eine Sache fehlt mir noch, wenn man nichts einträgt kann man ungehindert weitermachen. Das Reparurfeld soll aber zwingend ausgefüllt werden. Sprich die Messagebox soll solange aufpoppen bis ein Eintrag erfolgt ist.
Viele Grüße
Jörg
Nachfrage
08.08.2019 10:09:53
{Boris}
Hi,
nur nachgefragt: Was stört Dich an der Variante mit der Inputbox?
VG, Boris
Anzeige
AW: Nachfrage
08.08.2019 10:32:56
Jörg
Hallo Boris,
die Inputbox ist auch eine geniale Idee. Im Grundprinzip würde ich auch diese Umsetzung nehmen. Hier sind aber mehrere Probleme aufgetreten:
1. Wenn ich das Datum wieder löschen wollte ist die Box aufgepoppt. Auch wenn ich Abbrechen geklickt habe, konnte ich nicht das Datum entfernen.
2. Habe ich weniger als 5 Zeichen in die Box eingetippt, wurden diese zwar nicht in der Zelle übernommen ... konnte aber auch weitermachen ohne einen Eintrag in der Zelle vorzunehmen.
Was auch gleichzeitig das dritte Problem ist, da ich möchte das die Zelle zwingend befüllt wird.
Ehrlich gesagt wollte ich nicht unverschämt werden und sagen: "Hey Boris der Code ist spitze aber mach doch mal noch dies und das."
Gruß
Jörg
Anzeige
Vorschlag auf mpb-Basis
08.08.2019 10:59:11
{Boris}
Hi,
basierend auf dem Vorschlag von mpb:
Deklariere in einem allgemeinen Modul eine öffentliche Variable:
Public strCell As String
Und in das Klassenmodul des Tabellenblattes nun diesen Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 Then
MsgBox "Reparatur eingetragen"
Target.Offset(0, 1).Select
strCell = Target.Offset(0, 1).Address(0, 0)
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Len(strCell) Then
If Range(strCell) = "" Then
Range(strCell).Select
Exit Sub
Else
strCell = ""
End If
End If
End Sub
VG, Boris
Anzeige
AW: Vorschlag auf mpb-Basis
08.08.2019 11:27:45
Jörg
Hi,
ich kann immer noch ohne Eintrag die Zelle verlassen.
VG, Jörg
Das funktioniert...
08.08.2019 13:07:34
{Boris}
Hi,
...daher lad mal Deine Mappe mit deinem Versuch hoch.
VG Boris
AW: Das funktioniert...
08.08.2019 13:25:39
Jörg
Hi,
Du hast Recht. Es funktioniert. Ich hatte die öffentliche Variable in "Diese Arbeitsmappe" hinterlegt und nicht in "Tabelle1". Konnte ja nicht funktionieren.
Super. Danke :) Vielen Dank.
VG, Jörg
Selbst "Tabelle1" hatte ich eigentlich...
08.08.2019 13:43:17
{Boris}
Hi,
...nicht gemeint sondern ein allgemeines Modul (Einfügen-Modul).
Aber im Klassenmodul der Tabelle ("Tabelle1") funktioniert es auch. :-)
VG, Boris
Und damit Du...
08.08.2019 13:49:49
{Boris}
Hi,
...ein Datum auch wieder löschen kannst ohne den Reparatureintrag vornehmen zu müssen, würde ich den gesamten Code jetzt so nutzen (alles in das Klassenmodul Tabelle1):
Public strCell As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 And Target  "" Then
Target.Offset(0, 1).Select
strCell = Target.Offset(0, 1).Address(0, 0)
MsgBox "Reparatur eintragen"
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Len(strCell) Then
If Range(strCell) = "" Then
Range(strCell).Select
Exit Sub
Else
strCell = ""
End If
End If
End Sub
VG, Boris
Anzeige
AW: Und damit Du...
08.08.2019 15:05:02
Jörg
Hi,
alles klar. Nochmal Dankeschön Du hast mir wirklich weitergeholfen.
VG Jörg

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige