Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
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-Abfrage bei Datei-öffnen?

VBA-Abfrage bei Datei-öffnen?
09.10.2015 09:10:38
Stephan
Hallo an alle VBA-Profis,
kurz zu meiner Person:
Ich bin Stephan, neu hier und habe nur durch den Macrorecorder und durch gewisse Stöbereien auf Onkel-Google etwas Kenntnis vom VBA-Programmieren.
Getreu dem Motto "Learning by doing" krieche ich durch die Foren, versuche Codes zu verstehen und umzusetzen, um das Verständnis zu vertiefen!
Nun zu meinem Problem:
Ich berechne in der Zelle "G6" bis "Gx"(unendlich - aber meist nicht mehr als 500 Zeilen, da regelmäßig welche manuell hinzu oder weg kommen) eine Varianz aus 2 Datumswerten.
Mit "Conditional Formatting" habe ich bereits die Zellenformatierung so gelegt, dass beim Übersteigen des schwellenwerts "30" die Schrift Rot gefärbt wird.
Nun möchte ich das ganze erweitern, indem ich eine automatische MsgBox aufpoppen lasse, sobald in entsprechneder Zelle der Wert "30" überschritten wird.
Beim Stöbern hier im Forum habe ich bereits einen ersten Lösungsansatz gefunden, der mir aber nur bedingt weiter hilft.
Dieser sieht wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Range("g6") > 30 Then
MsgBox ("Wert Zelle G6 überschritten!")
Exit Sub
End If
End Sub

Das Problem wäre hier, dass ich mich nur auf eine einzige Zelle beziehe. Diesen Code müsste ich somit bis Zeile x manuell vervielfältigen & mir würden entsprechend viele MsgBoxen wie Anzahl-Fehler aufpoppen oder?
Nun, gibt es einen Code, in dem ich einen Bereich markieren kann, dieser Code jedoch jede Zelle einzeln wahrnimmt und nicht die Summe dieser markierten Zellen prüft? -> Sprich Zelle A1-10 haben je Wert "1", der Schwellenwert wäre 5, ich möchte also keine Warnmeldung, wenn die Summe der Zellen A1-10 das Ergebnis "10" ergeben.
Meine Frage weil...
====>
Meine Vorstellung:
Beim überschreiten des Schwellenwertes "30" soll(en) alle Fehler-Zelle(n) in der MsgBox angezeigt werden, welche diesen Wert überschritten haben.
Das ganze soll bei einer einmaligen überprüfung beim "Dokument-öffnen" passieren.
Auch hierzu hab ich hier im Forum bereits einen Code gefunden:

Sub Workbook_Open()
blablabla
End Sub

(Allerdings weiß ich an dieser Stelle noch nicht einmal, wie ich diesen Code mit dem ersteren Code zusammenfüge)
Ich habe nun also bereits den Code zum Warnmeldung bringen, der allerdings nicht beim herumrechnen während einer geöffneten Datei aktiviert werden soll, sondern bereits beim Datei-Öffnen.
Euch möchte ich um Hilfe bitten beim Zusammenfügen der beiden Codes "Run when open Document" & "Run MsgBox when Failure".
Sowie ein "nice to have", dass EINE MsgBox alle Fehlerzellen bereits ausspuckt.
Ich weiß, der Code wird etwas aufwändig werden, daher ist letzteres nice to have kein muss. Würde mir aber dennoch helfen, falls ich im worst case bei 100 fehlerwerten 100 MsgBoxen manuell schließen muss....
Danke schon mal für eure Hilfe!
Gruß
Stephan

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA Msgbox bei Wertüberschreitungen
09.10.2015 09:29:23
EtoPHG
Hallo Stephan,
Zitat: Ich berechne in der Zelle "G6" bis Gx..
Machst das wirklich du? Durch manuelle Eingabe in diesem Zellbereich?
oder... stehen in den Zellen Formeln? Wenn ja: welche Zellbereiche werden manuell (durch Benutzereingaben) verändert und verursachen dadurch eine Resultatsveränderung im Zielbereich (G6..Gx)?
Gruess Hansueli

AW: VBA Msgbox bei Wertüberschreitungen
09.10.2015 09:41:46
Stephan
Hallo EtoPHG,

Zitat: Ich berechne in der Zelle "G6" bis Gx..
Machst das wirklich du? Durch manuelle Eingabe in diesem Zellbereich?
oder... stehen in den Zellen Formeln? Wenn ja: welche Zellbereiche werden manuell (durch Benutzereingaben) verändert und verursachen dadurch eine Resultatsveränderung im Zielbereich (G6..Gx)?

Entschuldige, natürlich mache ich die Eingabe in diesen Zellen nicht manuell.
Es existiert in "H2" die Funktion "=HEUTE()", also das jeweils aktuelle Datum.
In den Zeilen "C6" bis "Cx" werden Ausgabedatum´s-Werte eingetragen.
Die Differenz zwischen "=HEUTE()" & "C6" ergibt den Wert in G6...
Die Differenz zwischen "=HEUTE()" & "C7" ergibt den Wert in G7...
usw. usw.
Gruß
Stephan

Anzeige
AW: VBA Msgbox bei Wertüberschreitungen
09.10.2015 09:44:45
Stephan
*Ergänzung:
In den Zellen der Spalte "B" werden die Daten manuell eingetragen!
Die Werte der Spalte "G" berechnen sich durch "H2-Bx"!
Gruß

AW: VBA Msgbox bei Wertüberschreitungen
09.10.2015 11:38:57
EtoPHG
Hallo Stephan,
Zitat: Beim überschreiten des Schwellenwertes "30" soll(en) alle Fehler-Zelle(n) in der MsgBox angezeigt werden, welche diesen Wert überschritten haben.
Das ganze soll bei einer einmaligen überprüfung beim "Dokument-öffnen" passieren.

Frage dich mal, was der Anwender dann mit einer Meldung macht, die sagen wir, ein Dutzend Einträge (Zelladressen) enthält! Schreibt er diese auf einen Zettel und sucht dann mühsam jede Zeile im Tabellenblatt?
Ich würde das so machen:
' Dieser Code gehört in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_Open()
Const cPruefTabelle As String = "Tabelle1"    ' Tabelle-Name anpassen!
Const cLimit As Long = 30
If WorksheetFunction.Max(Worksheets(cPruefTabelle).Columns(7)) > cLimit Then
MsgBox "Bitte filtern Sie die Spalte G in " & cPruefTabelle & vbCrLf & _
"auf Werte > " & cLimit & "!", _
vbExclamation, "Limitprüfung"
Else
MsgBox "Keine Limitüberschreitungen in " & cPruefTabelle, _
vbInformation, "Limitprüfung"
End If
End Sub
Gibt dem Anwender (beim Öffnen der Mappe) eine Anweisung, das solche Werte vorhanden sind und durch das Filtern (Zahlenfilter) in G hat er mit 2 Klicks alle betroffenen Zeilen zum Bearbeiten.
...und
' Dieser Code gehört in das zu überprüfende Tabellenblatt
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' Überprüft die Limitüberschreitung in Spalte G bei manueller Datumseingabe in Spalte B
Const cLimit As Long = 30
Dim rChk As Range, rC As Range
Set rChk = Intersect(Target, Columns(2))
If Not rChk Is Nothing Then
For Each rC In rChk
If rC.Offset(, 5) > cLimit And rC.Row > 2 Then
MsgBox "Limit (" & cLimit & ") in Zelle " & _
rC.Offset.Address(0, 0) & " überschritten!", _
vbCritical, "Limitprüfung"
End If
Next rC
End If
End Sub
Hier wird bei der Änderung von Zellen in B überprüft, ob das entsprechende Limit überschritten wird.
Gruess Hansueli

Anzeige
AW: VBA Msgbox bei Wertüberschreitungen
09.10.2015 12:07:51
Stephan
Hallo Hansueli,
erstmal ein großes DANKE!
Fand ich spitze, dass du auch die Beschreibungen (Code in Tabellenblatt usw.) hinzgefügt hast!
Der Code funktioniert soweit.
Im Prinzip reicht deine Lösung, denn so richtig anfangen kann niemand was mit den direkt angezeigten Daten in der MsgBox.
Die Filtermethode ist hier besser am Platz!
Werde den Text noch entsprechend anpassen und mich dann gleich ans Code-Verstehen machen!
Nochmal danke!
Gruß
Stephan

338 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige