Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
600to604
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
600to604
600to604
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Zellbereich überwachen mit VBA Auskunft
Erich
Hallo,
habe hinter einem Zellenbereich z.b. A1:A10 je eine Formel hinterlegt, die mir
ein "x" ausgibt, wenn etwas zutrifft! nun benötige ich ein Programm was im Hintergrund die Zellen A1:A10 überwacht und bei einem "x" mir eine Messagebox ausgibt, in der steht "In Zeile xy steht ein x, bitte bearbeiten!". Könnt ihr mir dabei bitte helfen!
vielen dank
Erich

37
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zellbereich überwachen mit VBA Auskunft
Volker
Hallo Erich,
kopier folgenden Code in die entsprechende Tabelle unter "Microsoft Excel Objekte" im VBA Editor:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("a1:a10")) Is Nothing Then
If Target = "x" Then
MsgBox "Bitte Zelle " & Target.Address(0, 0) & " bearbeiten"
End If
End If
End Sub

Habe Bereich A1:A10 aus Deiner Fragestellung übernommen. Du kannst den Zellbereich anpassen.
Gruß
Volker
AW: Zellbereich überwachen mit VBA Auskunft
Martin
Hallo,
da die x-Werte über eine Formel erzeugt werden, greift das Change-Ereignis nicht. So geht's:

Private Sub Worksheet_Calculate()
If Application.WorksheetFunction.CountIf(Range("A1:A10"), "=x") > 0 Then
MsgBox "Bitte Zelle bearbeiten"
End If
End Sub

oder so:

Private Sub Worksheet_Calculate()
For i = 1 To 10
If Cells(i, 1) = "x" Then
MsgBox "Bitte Zelle " & Cells(i, 1).Address(0, 0) & " bearbeiten."
Exit Sub
End If
Next i
End Sub

Gruß
Martin Beck
Anzeige
Asche auf mein Haupt
Volker
.
Zellbereich überwachen mit VBA Auskunft
Erich
Danke, klappt schon super, ist es möglich anstatt der Zelle die Zeile auszugeben?
Bin aber schon super glücklich über die schnelle Lösung!
MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT
Luc:-?
AW: MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT
Erich
Da ich mich leider nicht mit VBA auskenne klappt diese Zeile nicht
MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT (da fehlen noch parameter!)
Aber vielen dank für die schnelle antwort super forum
AW: MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT
Volker
Hallo Erich,
o.T. bedeutet "ohne Text", d.h. die Antwort steht im Betreff und der Antworter hat keinen weiteren Text gepostet. Man kann sich also sparen, den Thread zu öffnen.
Was Luc meinte war: ersetze Zeile
MsgBox "Bitte Zelle " & Cells(i, 1).Address(0, 0) & " bearbeiten."
durch
MsgBox "Bitte Zeile "& Target.Row &" bearbeiten."
Gruß
Volker
Anzeige
AW: MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT
Erich
Habe die Zeile MsgBox "Bitte Zelle " & Cells(i, 1).Address(0, 0) & " bearbeiten."
durch MsgBox "Bitte Zeile "& Target.Row &" bearbeiten." ausgetauscht, allerdings funktioniert die Ausgabe nicht! Muss hinter Target.Row noch (i,1).Adress(0,0)?
AW: MsgBox "Bitte Zeile "& Target.Row &" bearb..." oT
Volker
Hallo Erich,
eigentlich ist es so richtig. Schau mal, ob die Leerzeichen vor und nach dem "&" da sind.
Wenn nicht, meckert zwar normalerweise der Editor, aber wer weiß.
MsgBox "Bitte Zeile " & Target.Row & " bearbeiten."
Gruß
Volker
AW: Zellbereich überwachen mit VBA Auskunft
Martin
Hallo Erich,
welchen der von Volker und mir vorgeschlagenen Codes verwendest Du denn? Volkers Code kann doch eigentlich nicht funktionieren, wenn Deine ursprüngliche Fragestellung korrekt beschrieben war.
Am besten Du lädst mal die Datei hoch.
Gruß
Martin Beck
Anzeige
AW: Zellbereich überwachen mit VBA Auskunft
Volker
Hallo Erich,
sorry, da hab ich gepennt.
Das Calculate-Ereignis hat natürlich kein "target" als Parameter.
Aber die Zeilennr. hast Du doch schon längst:
For i = 1 To 250
If Cells(i, 8) = "X" Then
Cells(i,8) bedeutet Zeile i, Spalte 8
ergo schreibst Du nicht:
MsgBox "Bitte SOP in Zelle " & Cells(i, 2).Address(0, 0) & " bearbeiten, diese muss wieder vorgelegt werden!", vbOKOnly, "D.Wank"
sondern:
MsgBox "Bitte SOP in Zeile " & i & " bearbeiten, diese muss wieder vorgelegt werden!", vbOKOnly, "D.Wank"
Den Text vor und nach " & i & " kannst Du natürlich frei gestalten.
Das ganze geht aber auch kürzer:

Private Sub Worksheet_Calculate()
On Error Resume Next
MsgBox "Bitte SOP in Zelle " & Cells.Columns(8).Find("X").Row & " bearbeiten, diese muss wieder vorgelegt werden!", vbOKOnly, "D.Wank"
End Sub

Hallo Martin, hau mich, wenn ich wieder falsch liege.
Gruß
Volker
Anzeige
Hallo Volker: *streichel* ;-) (mT)
Martin
Hallo Volker,
bei meiner Nachfrage war mir unklar, welchen Code Erich verwendet, und die vorliegenden Antworten bezogen sich auf Target, was ja, worauf wir uns schon geeinigt hatten ;-), nicht funktioniert. Daher meine Nachfrage. Ich wollte kein Salz in Wunden streuen. Und Dein Lösungsvorschlag funktioniert natürlich einwandfrei.
Gruß
Martin Beck
AW: Hallo Volker: *streichel* ;-) (mT)
Volker
Hallo Martin,
keine Angst, so eine Mimose bin ich nicht. Ich wollte auch nur, dass Du aufpasst, falls ich wieder Quatsch erzähle.
Trotzdem Danke für die Streicheleinheiten.
Was ich allerdings festgestellt habe:
Das Calculate wird auch ausgelöst, wenn in einer anderen Mappe neu berechnet wird ?
Ist das komisch oder muß das so sein?
Mit dem WS-Change-Ereignis wäre man jedenfalls auf der sicheren Seite:

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 8) = "X" Then
MsgBox "Bitte Zeile " & Target.Row & " bearbeiten."
End If
End Sub

Das hätte auch den Vorteil, dass nicht jedes "X" in Spalte 8 bei jeder Neuberechnung der Tabelle neu angemeckert wird. (Falls das in Erich's Sinne ist)
Gruß
Volker
Anzeige
Nochmal zu Change
Martin
Hallo Volker,
alles klar. Hast Du in Erichs Tabelle mal die ausgeblendeten Spalten eingeblendet? Über einige Verknüpfungen wird letztlich in Spalte H ein X eingetragen wenn der Wiedervorlagetermin in Spalte F kleiner als HEUTE ist. Und dies tritt nunmal ein, ohne das in der Tabelle irgendetwas geändert wird. Insofern kann nur das Calculate-, nicht hingegen das Change-Ereignis ausgelöst werden.
Eine Alternative wäre es, in einem Workbook_Open-Makro die Relationen "WV-Termin" und HEUTE zu Prüfen und für jeden Fall, der zu bearbeiten ist, eine Meldung auszugeben oder z.B. die Zelle in Spalte H farblich zu markieren.
Gruß
Martin Beck
Anzeige
AW: Hallo Volker: *streichel* ;-) (mT)
Erich
Hallo an euch beide, erstmal vielen dank für die schnelle antwort, der Punkt geht an volker, das wäre nämlich meine nächste Frage gewesen! "Das hätte auch den Vorteil, dass nicht jedes "X" in Spalte 8 bei jeder Neuberechnung der Tabelle neu angemeckert wird. (Falls das in Erich's Sinne ist)" Also voll ins Schwarze getroffen! Jetzt nur noch eine kleine Frage, diese ist aber nicht so wichtig! Wie ihr der Mappe entnehemen könnt wird das Datum um 2 Jahre erhöht, ist heute der erhöhte Datumswert, soll die Meldung erscheinen, Frage: was passiert wenn mehrere "X" in der Spalte an einem Tag auftauchen?
vielen Dank für die super unterstützung!
gruß
erich
Anzeige
Mehrere "x"
Martin
Hallo Erich,
wenn Du Deine Lösung mit der Schleife von 1 bis 250 beibehältst, öffnet sich für jedes "x" eines Messagebox.
Um den Stand der Dinge noch einmal zusammenzufassen:
1. Das Change-Ereignis kann prinzipiell nicht eingesetzt werden.
2. Das Calculate-Ereignis wird eventuell häufiger als gewünscht ausgelöst.
3. Alternative: Mit Workbook_Open beim Öffnen der Datei alle Zeilen durchprüfen und für jeden Fall "Wiedervorlage" = "Heute" eine Meldung abgeben lassen.
Letztenendes müßtest Du uns mal sagen, wie Du Dir die Warnhinweise idealerweise vorstellen würdest.
Gruß
Martin Beck
Anzeige
AW: Mehrere "x"
Erich
3. Alternative: Mit Workbook_Open beim Öffnen der Datei alle Zeilen durchprüfen und für jeden Fall "Wiedervorlage" = "Heute" eine Meldung abgeben lassen. TOP !!!!!
Das Wäre super und dann alle Ergebnisse als MsgBox ausgabe oder als Zeilenmarkierung,
z.b. Hintergrundfarbe der kompletten Zeile "gelb", wobei letzteres denke ich mal besser ist,damit nicht 10 MsgBoxen aufpoppen!
Danke für die Hilfe, schaue auch schon ob ich ab und zu helfen kann, allerdings sind viele schneller als ich!
gruß und dank
erich
AW: Mehrere "x"
Volker
Hallo Erich,
in dem Fall könntest Du eigentlich auf VBA verzichten und die entsprechenden Zeilen mit bedingter Formatierung einfärben, oder.
Gruß
Volker
Anzeige
AW: Mehrere "x"
Erich
Das habe ich mir auch schon überlegt, aber wie markiere ich mit der bedingten Formatierung eine ganze Zeile, bzw einen bestimmten Zeilenbereich! Habe immer gedacht das
ich formatierungen drauf habe
AW: Mehrere "x"
Volker
Bsp.:
A3 - H3 markieren, Format/bedingte Formatierung/Formel ist =$H3="X"
Da Runterziehen der Markierung wg. händischer Einträge wohl entfällt, mußt Du die Formatierung mit dem Pinsel übertragen.
Gruß
Volker
Bedingte Formatierung
Martin
Hallo Erich,
Beispiel für Zeile 7:19:
Zeilen markieren, FORMAT-BEDINGTE FORMATIERUNG
Formel ist: =HEUTE()&gt=$G7
Format auswählen, z.B. Hintergrund rot.
Gruß
Martin Beck
AW: Bedingte Formatierung
Erich
Das war alles super, interssieren würde mich doch noch die
3. Alternative: Mit Workbook_Open beim Öffnen der Datei alle Zeilen durchprüfen und für jeden Fall "Wiedervorlage" = "Heute" eine Meldung abgeben lassen. TOP !!!!!
D.h. ich rufe die Datei auf und es erscheint eine MsgBox, in der steht "Bitte Zeile(n)";alle Zeilen in dehnen ein "X" steht Untereinander;" bearbeiten". Das wäre dann
das non plus ultra :-)
aber schonmal besten dank für die unterstützung!
AW: Bedingte Formatierung
Martin
Hallo Erich,
ich hoffe, es sind nicht allzuviele Zeilen ;-)

Private Sub Workbook_Open()
Dim str As String
Dim i As Long
i = 7
Do Until IsEmpty(Cells(i, 8))
If Cells(i, 8) = UCase("X") Then
str = str & Chr(13) & i
End If
i = i + 1
Loop
MsgBox "Bitte folgende Zeilen bearbeiten: " & str
End Sub

Gruß
Martin Beck
AW: Bedingte Formatierung
Volker
Hallo Erich,
wie machst Du eigentlich bearbeitete Zeilen kenntlich?
Indem Du das Datum der Bearbeitung in die Spalte "Vorlage" schreibst?
Wenn nicht, wirst Du für jede Zeile, deren Wiedervorlage vor dem akt. Datum liegt, zur Bearbeitung aufgefordert, bearbeitet oder nicht.
Abgesehen davon kannst Du auch alle Formeln in den Spalten H bis L löschen und die "X" beim WorkbookOpen eintragen:

Private Sub Workbook_Open()
Dim str As String
Dim i As Long
Sheets("Tabelle1").Activate
i = 7
While Cells(i, 7) <> ""
If Cells(i, 7) < Date Then
str = str & Chr(13) & i
Cells(i, 8) = "X"
Cells(i, 9) = ""
Else
Cells(i, 8) = ""
Cells(i, 9) = "X"
End If
i = i + 1
Wend
MsgBox "Bitte folgende Zeilen bearbeiten: " & str
End Sub

Gruß
Volker
AW: Bedingte Formatierung
Erich
Hallo Ihr Zwei,
werde die Zeilen morgen testen, zur Erklärung der Tabelle:
Hier werden Dokumente eingetragen, die alle 2 Jahre aktualiesiert werden müssen, um
das ganze einfacher zu gestalten habe ich diese Tabelle erstellt. Mir wird dann aus-
gegeben in Spalte "H" das ich die Dokumente wieder bearbeiten muss, es handelt sich hierbei um mehrere hundert Dokumente!
Das mit dem "x" habe ich ja schon ganz gut hinbekommen, ohne VBA kenntnisse (meine Meinung). Nun hat mir die Darstellung nicht so gut gefallen und ich dachte das mit
der Magbox wäre ganz nett. Aber was ihr nun daraus gemacht habt ist einfach super!
Hoffe die Zeilen werden funktionieren, dann ist meine Tabelle (für mich) mehr als
perfekt!
gruß
erich
Gern geschehen....
Volker
...man lernt ja oft selber noch was dabei ;-))
AW: Gern geschehen....
Erich
Hallo Volker und Martin,
vielen dank für die tolle unterstützung, hat alles funktioniert!
gruß
erich
AW: Zellbereich überwachen mit VBA Auskunft
Erich
Hallo volker und Martin,
Habe die Zeilen mal richtig unter die Lupe genommen, bzw. mal alles getestet und wenn ich eine odere mehrere Zeilen nicht ausfülle geht die Formel leider nicht, sie funktioniert nur wenn es zwischen den Zeilen keine leerräume gibt. Benötige jedoch leere Zeilen, was muss man also ändern?!
gruß
erich
AW: Zellbereich überwachen mit VBA Auskunft
Luc:-?
Hallo Erich,
wenn du nicht Formel, sondern Code meinst und die Workbook_Open-Ereignisprozedur verwendest, brauchst du die Gesamtanzahl der betroffenen Zeilen bzw die Nr der letzten Zeile (kann auch automatisch ermittelt wdn). Dann kannst du die While-Wend-Schleife auf For i=7 To endzeilennr mit Abschlusszeile Next i umstellen. Die beiden i-Zuweisungen entfallen dann. Mit einer am Anfang der Schleife angebrachten If-Abfrage, ob die Zelle leer ist, kannst du mit GoTo marke gleich zur Next-Zeile springen, die du dann natürlich mit der Marke versehen musst.
Gruß Luc :-?
AW: Zellbereich überwachen mit VBA Auskunft
Erich
Hi Luc,
danke für deine Antwort, allerdings kann ich damit nichts anfangen, habe kaum (keine)
ahnung von vb, so das du mir damit leider nicht weiterhelfen kannst. aber trotzdem danke!
gruß
erich
...OK - aber vielleicht anderen Lesern! --owT
Luc:-?
AW: Zellbereich überwachen mit VBA Auskunft
Volker
Hallo Erich,
ich will ja nicht meckern, aber auch als VBA Anfänger sollte man wenigstens versuchen, die erhaltenen Codes halbwegs zu verstehen, statt immer nur "Geht nicht" zu sagen.
Wenn dann etwas nicht geht oder anders gemacht werden soll, kann man wenigstens gezielt fragen. Außerdem kann man nur so was lernen.
Von daher kann ich verstehen, wenn Luc langsam etwas ungeduldig wird.
Ich komm noch mal zurück auf meinen Vorschlag, beim Öffnen der Datei auf Wiedervorlage zu prüfen, so dass Formeln in der Tabelle überflüssig sind.
Jetzt mit Berücksichtigung möglicher Leerzellen und Kommentar.
Versuch mal nachzuvollziehen, was passiert. Dann kannst Du irgendwelche Verbesserungen vielleicht sogar selber versuchen.
Der Code nicht in ein Modul, sondern in "Diese Arbeitsmappe"/"This Workbook"

Private Sub Workbook_Open() 'wird beim Öffnen ausgelöst
Dim str As String   'variable für die zu bearbeitenden Zeilennummern
Dim i, letzte As Long 'Variablen für den Zeilenindex
Sheets("Tabelle1").Activate 'ersetze Tabelle1 durch den richtigen Namen
letzte = Range("G65536").End(xlUp).Row 'letzte ist Zeilenindex der letzten nichtleeren Zelle von unten in Spalte G
For i = 7 To letzte 'von Zeile 7 bis s.o.
If Cells(i, 7) = "" Then    'wenn kein Eintag bei Wiedervorlage, gehe zu Sprungmarke "weiter:"
GoTo weiter
ElseIf Cells(i, 7) < Date Then  'sonst, wenn Wiedervorlage vor akt. Datum, setze auf bearbeiten
str = str & Chr(13) & i     'füge Zeilennummer an
Cells(i, 8) = "X"
Cells(i, 9) = ""
Else         'sonst, wenn Wiedervorlage nach akt. Datum, setze auf nicht bearbeiten
Cells(i, 8) = ""
Cells(i, 9) = "X"
End If
weiter:
Next
MsgBox "Bitte folgende Zeilen bearbeiten: " & str   'Ausgabe der Zeilennummern
End Sub

Kleiner Tip am Rande: mit F8 kannst Du einen Code zeilenweise ausführen und dabei schauen, was passiert.
Gruß
Volker
AW: Zellbereich überwachen mit VBA Auskunft
Erich
Hi Volker,
danke für die Zeilen, hatte auch einen Fehler gemacht und den Code in ein Modul copiert, nun nachdem ich ihn in die Arbeitsmappe kopiert habe funktioniert alles wunderbar. Ich bin euch allen sehr dankbar.
Würde gerne VB lernen, aber ich habe überhaupt keine ahnung wie das funktioniert, früher (C64) habe ich mal in Basic programmiert, mehr aber auch nicht, nun versuche ich irgendwie bei null anzufangen mit VB, was natürlich schwer fällt wenn man noch Basic im Kopf hat. Ich denke VB ist recht einfach, wenn man erstmal hinter das prinzip gelangt ist, aber dort hin zu kommen ist recht schwer, da einem ja auch die Zeit fehlt.
Vielen Dank nochmal!
gruß
Erich
Nur Mut....
Volker
..ich hab früher auch nur Basic, etwas Pascal und ganz, ganz wenig C programmiert.
Immerhin kennst Du schon mal die grundlegenden Konstrukte wie Schleifen, Verzweigungen usw.
Anders als in Basic gibt es bei VBA halt eine prozedurale Struktur mit Prozeduren und Funktionen als eine Art Unterprogramm.
Was noch fehlt, ist die Syntax, aber da kann man vom Makrorekorder lernen, obwohl vieles, was der aufzeichnet, suboptimal ist ;-)
Ich benutze, wie bestimmt viele andere hier, oft den Rekorder, wenn ich eine Syntax suche. Wer kann das schon alles auswendig.
Wenn Du im Forum stöberst, wirst ständig irgendwelche interessanten Sachen finden, die Du dann selber ausprobieren kannst. Das ist allemal besser, als sich durch ein Lehrbuch zu ackern.
Also immer am Ball bleiben
Gruß
Volker
AW: Zellbereich überwachen mit VBA Auskunft
Martin
Hallo Erich,
1) Du hast ja mehrere Lösungen zur Auswahl. Welche möchtest Du nun nutzen und was genau funktioniert nicht? Falls es eine VBA-Lösung ist, poste den von Dir verwendeten Code.
2) Lade eine geänderte Beispieldatei hoch, in die Du Leerzeilen und was Du sonst noch (zusätzlich zur ursprünglichen Fragestellung) noch brauchst enthalten sind.
Allgemeiner Hinweis: Es ist für alle effizienter, wenn Beispieldateien gleich so aufgebaut sind, wie die "Echtdatei" später aussehen soll.
Gruß
Martin Beck
AW: Zellbereich überwachen mit VBA Auskunft
Erich
Danke für die aufmunternden worte, werde am ball bleiben und versuchen etwas mehr zeit mit vb zu verbringen!
Hier die datei für alle, damit man was zum stöbern hat!
https://www.herber.de/bbs/user/21835.xls
gruß
erich
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige