Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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
Makro nur in einem Arbeitsblatt
18.07.2022 11:09:24
Thomas
Hallo Zusammen,
ich habe 2 mögliche Codes zum Ausführen einer Abfrage. Es geht nur darum, wie ich den Code in einem einzelnen Arbeitsblatt verwende.
Code1:
'

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'If Cells(6, 7) Or Cells(6, 10) Or Cells(6, 13) Or Cells(6, 16) Or Cells(6, 19) Or Cells(6, 22) Or Cells(6, 25) = "" Then
'MsgBox "Maske ist noch nicht vollständig befüllt"
'Cancel = True
'End If
'End Sub
Dieser funktioniert, aber ist ja wegen "workbook" für die gesamte Arbeitsmappe aktiv. Wie muss nun der Code aussehen für die selbe Funktion nur in einem Arbeitsblatt?
Mein Vorschlag: es tut sich aber nichts ...
Code2:

Private Sub Worksheet_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Cells(6, 7) Or Cells(6, 10) Or Cells(6, 13) Or Cells(6, 16) Or Cells(6, 19) Or Cells(6, 22) Or Cells(6, 25) = "" Then
MsgBox "Maske ist noch nicht vollständig befüllt"
Cancel = True
End If
End Sub
Danke für eure Hilfe!
Gruß Thomas

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

Betreff
Datum
Anwender
Anzeige
AW: Makro nur in einem Arbeitsblatt
18.07.2022 11:24:45
Daniel
Hi
1. ist deine Abfrage Bullshit
du musst für jede Zelle prüfen, ob der Inhalt leer ist, also

If Cells(6, 7) = "" Or Cells(6, 10) = "" Or Cells(6, 13) = "" ....
2. BeforeSave kann nur für die Mappe funktionieren!
sollte eigentlich klar sein.
wenn du mehrer Blätter hast und nur das Blatt mit der Maske geprüft werden soll, dann musst du das Blatt vor jedem Cells angeben:

If sheets("Maske").Cells(6, 7) = "" Or Sheets("Maske").Cells(6, 10) = ""....
damit du nicht jedesmal das Sheets("Maske") schreiben musst, kannst du die With-Klammer verwenden.
hierbei wird das bei WITH definierte Objekt immer dort eingesetzt, wo ein Ausdruck mit einem Punkt beginnt:

With Sheets("Maske")
If .Cells(6, 7) = "" Or .Cells(6, 10) = "" Or .Cells(6, 13) = "" ... Then
MsgBox "Maske ist noch nicht vollständig befüllt"
Cancel = True
End If
End With
wenn die Prüfung nur ausgeführt werden soll, wenn das Blatt Maske auch aktiv ist, kannst du das extra abfragen:

If ActiveSheet.Name = "Maske" Then
Gruß Daniel
Anzeige
AW: Makro nur in einem Arbeitsblatt
18.07.2022 11:35:52
MCO
Hallo Thomas!
Ich hab dir mal Deine Variante korrigiert, so wie auch von Daniel vorgeschlagen und zusätzlich einmal so geschrieben, wie ich es aufgebaut hätte.
Ist nur ein Vorschlag....

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Sheets(1)
If .Cells(6, 7) = "" Or .Cells(6, 10) = "" Or .Cells(6, 13) = "" Or .Cells(6, 16) = "" Or .Cells(6, 19) = "" Or .Cells(6, 22) = "" Or .Cells(6, 25) = "" Then
MsgBox "Maske ist noch nicht vollständig befüllt"
Cancel = True
End If
End With
With Sheets(1)
Set Rng = Union(.Cells(6, 7), .Cells(6, 10), .Cells(6, 13), .Cells(6, 16), .Cells(6, 19), .Cells(6, 22), .Cells(6, 25))
If Rng.Count  Rng.SpecialCells(xlCellTypeConstants).Count Then
MsgBox "Maske ist noch nicht vollständig befüllt"
Cancel = True
Rng.SpecialCells(xlCellTypeBlanks).Select
End If
End With
End Sub
Gruß, MCO
Anzeige
AW: Makro nur in einem Arbeitsblatt
18.07.2022 11:41:31
GerdL
Moin Thomas!

Private Sub Worksheet_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With ThisWorkbook.Worksheets("Tabelle99") 'anpassen
If WorksheetFunction.CountA(Union(.Cells(6, 7), _
.Cells(6, 10), _
.Cells(6, 13), _
.Cells(6, 16), _
.Cells(6, 19), _
.Cells(6, 22), _
.Cells(6, 25))) 
Gruß Gerd
AW: Makro nur in einem Arbeitsblatt
19.07.2022 11:01:14
Thomas
Ich danke euch!
AW: Makro nur in einem Arbeitsblatt
19.07.2022 13:29:02
Thomas
Leider klappt, das noch nicht so ganz,
mit dem Code von GerdL hab ich trotz Befüllen der relevanten Zellen die Ausgabe der Messagebox,
wisst ihr woran das liegen könnte?
Danke euch für weitere Tipps!
Worauf ich geachtet habe:
- Einfügen des Codes in "diese Arbeitsmappe"
- Aufrufen des Arbeitsblatts "Übersicht" nochmal explizit mit Select (mit oder ohne die Zeile keine Veränderung)
- Alle Zellen befüllt:
.Cells(6, 7), _
.Cells(6, 10), _
.Cells(6, 13), _
.Cells(6, 16), _
.Cells(6, 19), _
.Cells(6, 22), _
.Cells(6, 25)
Code:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Sheets("Übersicht").Select (aktiv oder auskommentiert)
With ThisWorkbook.Worksheets("Übersicht")
If WorksheetFunction.CountA(Union(.Cells(6, 7), _
.Cells(6, 10), _
.Cells(6, 13), _
.Cells(6, 16), _
.Cells(6, 19), _
.Cells(6, 22), _
.Cells(6, 25))) 

Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige