Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1564to1568
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

Bedingung vor dem Speichern

Bedingung vor dem Speichern
29.06.2017 13:26:07
Haas
Hey,
ich möchte eine Datei haben, bei der sobald in den Spalten: I10-40,I43-83… oder in den Spalten J,L,M (selbe Zeilen wie bei I) etwas vermerkt ist ich nur abspeichern kann, wenn in derselben Zeile die Spalte H ausgefüllt wurde. Wollte das mit einer Datenüberprüfung machen, dass es eben nicht ausgefüllt werden kann. Dies verhindert allerdings nicht, dass ich hier etwas reinkopieren kann etc. Kann mir jemand weiterhelfen wie meine Bedingung in VBA aussehen würde?
Bin leider in der Welt von VBA noch neu...
Vielen lieben Dank schonmal.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingung vor dem Speichern
29.06.2017 13:51:27
Michael
Hallo!
Teste mal folgenden Code; der muss in das Modul der Arbeitsmappe, d.h. mit Alt+F11 den VBA-Editor aufrufen, oben links solltest Du eine Explorer-Ansicht sehen, Doppelklick auf "DieseArbeitsmappe", den Code kopieren und rechts im Fenster einfügen:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet: Set Ws = Me.Worksheets("Tabelle1")
Dim a, i&, j&, k&
a = Array("I10:I40", "I43:I83", _
"J10:J40", "J43:J83", _
"L10:L40", "L43:L83", _
"M10:M40", "M43:M83")
For i = LBound(a) To UBound(a)
With Ws
j = j + WorksheetFunction.CountA(.Range(a(i)))
End With
Next i
k = WorksheetFunction.CountA(Ws.Range("H10:H40, H43:H83"))
If k  j Then
MsgBox "Spalte H wurde nicht vollständig ausgefüllt!"
Cancel = True
End If
Set Ws = Nothing: Erase a
End Sub
LG
Michael
Anzeige
Ergänzt...
29.06.2017 13:53:38
Michael
..achja, das wirkt/überprüft aktuell nur das Tabellenblatt namens "Tabelle1" - das musst Du ggf. anpassen (siehst Du im Code...).
Klappt?
LG
Michael
AW: Bedingung vor dem Speichern
29.06.2017 14:21:56
Haas
Hallo Michael,
vielen Dank erst einmal.
Jetzt kommt leider nur die Fehlermeldung auch dann, wenn ich die Spalte H ausgefüllt habe.
Grüße
Tobi
Also...
29.06.2017 14:29:09
Michael
Hallo!
Mein Code prüft ob in H10:H40 und H43:H83 (zusammengenommen) genau so viele gefüllte Zellen vorhanden sind wie in den Bereich I10:I40, I43:I83, J10:J40... (zusammengenommen).
Wenn diese beiden Summen sich unterscheiden, kommt die Fehlermeldung, was bei meinem Test einwandfrei funktioniert. Um Dir also weiterzuhelfen, müsste ich jetzt Genaueres von Deinen Bedingungen wissen...
LG
Michael
Anzeige
AW: Bedingung vor dem Speichern
29.06.2017 14:26:15
Haas
Entschuldigung ich hatte in einer Zeile was stehen :-D
Vielen Vielen Dank :-)
Ok, dachte ich schon ;-), Gern und lg, owT
29.06.2017 14:29:53
Michael
AW: Bedingung vor dem Speichern
29.06.2017 14:37:02
Haas
Jetzt doch noch eine Frage, wenn ich jetzt sowohl bei J und noch einer andere Spalte was stehen habe, meldet er mich auch einen Fehler. Allerdings reicht es wenn mind. eine der Spalten gefüllt sind muss auch H gefüllt sein. Dabei kann aber auch sein, dass sowohl I,J,L und M gefüllt sein. Dabei kommt aktuell allerdings ein Fehler!
Ah, jetzt weiß ich, was Du willst...
29.06.2017 14:49:54
Michael
...da hatte ich einen Denkfehler. Ich überleg mir was Neues, melde mich gleich...
LG
Michael
Teste mal...
29.06.2017 15:00:12
Michael
Hallo,
...diesen adaptierten Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet: Set Ws = Me.Worksheets("Tabelle1")
Dim a, b, i&, j&
a = Array("I10:I40", "J10:J40", "L10:L40", "M10:M40")
b = Array("I43:I83", "J43:J83", "L43:L83", "M43:M83")
For i = LBound(a) To UBound(a)
j = WorksheetFunction.CountA(Ws.Range(a(i)))
If j > 0 Then
If WorksheetFunction.CountA(Ws.Range("H10:H40"))  0 Then
If WorksheetFunction.CountA(Ws.Range("H43:H83")) 
Hast Du es so gemeint?
LG
Michael
Anzeige
AW: Teste mal...
29.06.2017 15:06:35
Haas
Herrlich!
Vielen Dank Michael. Find ich echt klasse was du da machst :-)
So ist der Code noch etwas sauberer...
29.06.2017 15:09:16
Michael
Freut mich, wenn's klappt!
Code nochmals adaptiert:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet: Set Ws = Me.Worksheets("Tabelle1")
Dim a, b, i&, j&, ChkA As Boolean, ChkB As Boolean, ChkC As Boolean
a = Array("I10:I40", "J10:J40", "L10:L40", "M10:M40")
b = Array("I43:I83", "J43:J83", "L43:L83", "M43:M83")
ChkA = False: ChkB = False: ChkC = False
For i = LBound(a) To UBound(a)
j = WorksheetFunction.CountA(Ws.Range(a(i)))
If j > 0 Then
If WorksheetFunction.CountA(Ws.Range("H10:H40"))  0 Then
If WorksheetFunction.CountA(Ws.Range("H43:H83")) 
Gleiche Funktion, aber der Code ist schöner ;-).
LG
Michael
Anzeige
AW: So ist der Code noch etwas sauberer...
29.06.2017 16:06:42
Haas
Ich trau mich ja schon gar nicht mehr nachzufragen weil du da soviel Arbeit reingesteckt hast :-D
Aber mir ist jetzt bei der Anwendung das Problem aufgefallen, dass wenn ich noch dann z.b. zwischen 10-40 noch Zeilen einfüge die Formel nicht mehr passt weil die theoretischen Lücken mit Überschrift dann wo anderst sind...
Jetzt dachte ich mir die Spalte A ist immer dann gefüllt, wenn die "Formel" die du da geschrieben hast aktiv sein soll. Es geht es auch zu sagen, mach mir die Prüfung ob H ausgefüllt wurde wenn in I,J,L oder M was steht nur dann, wenn A etwas eingetragen wurde?
Vielen Vielen Dank schonmal.
Anzeige
Sorry, aber...
29.06.2017 16:14:25
Michael
...das verstehe ich nicht.
weil die theoretischen Lücken mit Überschrift dann wo anderst sind
Was immer das bedeutet.
mach mir die Prüfung ob H ausgefüllt wurde wenn in I,J,L oder M was steht nur dann, wenn A etwas eingetragen wurde
Ich versuch's an einem Bsp.: Angenommen J10:J35 sind gefüllt, aber A10:A35 nicht - in diesem Fall ist es also egal ob in H10:H35 Werte vorhanden sind, d.h. Speichern soll möglich sein und keine Warnung erscheinen. ABER wenn J10:J35 UND A10:A35 gefüllt sind, DANN muss auch H10:H35 gefüllt sein, oder es erscheint die Warnung und Speichern ist nicht möglich. Richtig?
Gib Bescheid, allerdings bin ich erst morgen wieder im Forum!
Servus!
Michael
Anzeige
AW: So ist der Code noch etwas sauberer...
29.06.2017 16:38:08
Haas
Ich vermute das Klingt ziemlich wirr was ich da schreibe, aber du hast es tatsächlich verstanden :-D
Der Punkte für mich wäre dann ich kann diese Prüfung von A10:A1000 (theoretisch aber unendlich) machen und theoretisch beliebig viele Zeilen einfügen. Weil bisher ging es ja von J10-J40 dann kam eine Summenzeile dann ging es weiter. Wenn ich dann Zeilen hinzugefügt habe, kam die Fehlermeldung weil die Summenzeile auf einmal in der Range von 43 an drin war wo aber die H Zeile nicht ausgefüllt war.
D.h. wie du geschrieben hast, die Prüfung I10:I1000 (und natürlich auch J,L und M) ist gefüllt aber A nicht, ist es egal ob in H etwas steht. Nur wirklich dann, wenn A ausgefüllt ist soll die Prüfung stattfinden, dass nur gespeichert werden kann, wenn I,J,L oder M ausgefüllt wurde auch in H etwas steht (und das theoretisch wieder von 10:1000).
Vielen Dank :-) Das gibt 1000 Charma Punkte :-D
Anzeige
Okay, melde mich morgen... owT
29.06.2017 18:15:05
Michael
Teste mal...
30.06.2017 09:44:53
Michael
...diesen Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet: Set Ws = Me.Worksheets("Tabelle1")
Dim a, i&, j&
a = Array("I10:I1000", "J10:J1000", "L10:L1000", "M10:M1000")
For i = LBound(a) To UBound(a)
j = WorksheetFunction.CountA(Ws.Range(a(i)))
If j > 0 Then
If WorksheetFunction.CountA(Ws.Range("A10:A1000")) > 0 Then
If WorksheetFunction.CountA(Ws.Range("H10:H1000")) 
Passt?
LG
Michael
Kein Interesse mehr od. wieder neue Anforderung?oT
30.06.2017 13:34:59
Michael
Keine RM mehr für die letzte Variante? Schade...oT
03.07.2017 10:36:13
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige