Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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 MsgBox - Ausgabe verschiedener Werte

VBA MsgBox - Ausgabe verschiedener Werte
22.01.2014 14:09:35
Dominic
Hallo zusammen,
ich habe in einer Excel Tabelle 5 Formularsteuerelemente (Kontrollkästchen) eingefügt und diese natürlich auf unterschiedliche Zellbezüge von N1 bis N5 gesetzt.
Je nach Auswahl der Kontrollkästchen / abhaken habe ich in N1 bis N5 natürlich nun ein "Wahr oder Falsch" stehen.
Wie kann ich nun meine folgende VBA Druckfunktion um eine MsgBox Ausgabe erweitern, dass er mir diese "Checkliste" prüft, ob alles abgehakt ist - und wenn nicht alles abgehakt ist die fehlenden Punkte in einer MsgBox ausgibt und dann auch nachfragt, ob der Druck trotzdem durchgeführt werden soll.
Geht das? Wenn ja wie?
With ActiveSheet.PageSetup
.Zoom = False
.PrintArea = "$A$1:$H$84"
.Orientation = xlPortrait
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.Dialogs(xlDialogPrint).Show
ActiveSheet.PageSetup.PrintArea = False

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA MsgBox - Ausgabe verschiedener Werte
22.01.2014 14:27:18
Klaus
Hi,
auf die schnelle:
Sub AusdruckWenn()
Dim myRng As Range
Dim bDruckeWirklich As Boolean
With ActiveSheet
bDruckeWirklich = True
For Each myRng In Range("N1:N5")
If Not myRng Then
If MsgBox("In " & myRng.Address & " steht noch FALSCH! Trotzdem drucken?", vbYesNo)  _
= 6 Then
bDruckeWirklich = True
Else
bDruckeWirklich = False
End If
End If
Next myRng
If bDruckeWirklich Then
With .PageSetup
.Zoom = False
.PrintArea = "$A$1:$H$84"
.Orientation = xlPortrait
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.Dialogs(xlDialogPrint).Show
.PageSetup.PrintArea = False
End If
End With
End Sub
Geht auch eleganter. Wenn es wirklich nur N1:N5 ist, sollte das passen. Wenn auch mal ein dutzend Einträge fehlen können, würde ich die Fehl-Zellen erst sammeln und dann eine MsgBox über alles machen,
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA MsgBox - Ausgabe verschiedener Werte
22.01.2014 14:37:04
Dominic
Hi,
perfekt danke! Funktioniert einwandfrei.
Kann ich das aber noch ein wenig weiter "perfektionieren", dass er mir nicht nur den Zellbezug "N3" ausgibt sondern die eigentlich dahinter stehende Bezeichnung für dieses Feld, z. B. "Formular ABC" .
Entweder den Namen vom Kontrollkästchen heranzieht oder aber noch besser, das ich über eine Hilfsspalte oder einen VBA Verweis N1 bis N5 namentlich definiere. Die Definitionen / Namen für die jeweiligen Zellen (N1-N5) sind ja ohnehin fest vorgegeben.
Vielen Dank!

AW: VBA MsgBox - Ausgabe verschiedener Werte
22.01.2014 14:52:12
Klaus
Hi Dominic,
ich halte nichts davon, Namen von Elementen aus Zellpositionen auszulesen - das Element wird fix mal verschoben, und nu?
In dieser Zeile
If MsgBox("In " & myRng.Address & " steht noch [...]
entsteht die MsgBox, wobei myRng.Address die Zelladresse ist. Schreib die Bezeichner zB in Spalte Y der selben Datei und ändere die MsgBox entsprechend:
If MsgBox("In " & .Range("Y"& myRng.Row) & " steht noch [...]
und blende dann die Y-Spalte aus.
Bei der Gelegenheit noch die Feinheit, dass nur eine MsgBox kommt auch wenn viele Einträge fehlen. Der neue Code wäre dann:
Sub AusdruckWenn()
Dim myRng As Range
Dim bDruckeWirklich As Boolean
Dim bFrage As Boolean
Dim sText As String
With ActiveSheet
bFrage = False
bDruckeWirklich = True
For Each myRng In Range("N1:N5")
If Not myRng Then
sText = sText & .Range("Y" & myRng.Row) & " "
bFrage = True
End If
Next myRng
If bFrage Then
If MsgBox("In " & sText & "steht noch FALSCH! Trotzdem drucken?", vbYesNo) = 6 Then
Else
bDruckeWirklich = False
End If
End If
If bDruckeWirklich Then
With .PageSetup
.Zoom = False
.PrintArea = "$A$1:$H$84"
.Orientation = xlPortrait
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.Dialogs(xlDialogPrint).Show
.PageSetup.PrintArea = False
End If
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
In solchen Fällen arbeitet man ja auch besser ...
22.01.2014 15:24:50
Luc:-?
…mit benannten Bereichen, Leute,
deren Namen man einer Konstante zuweist, die dann im Pgm benutzt wird. Dadurch ist der so gekennzeichnete Bereich immer aktuell, auch, wenn der Bezug des Namens geändert wird (muss sich dann allerdings noch mit den PgmAktionen vertragen!). Ändert sich der Name, kann der im Pgm wg der Konstante auch leicht gefunden und geändert wdn (an nur 1 Stelle!).
Gruß Luc :-?

Du hast Recht, Luc, aber!
23.01.2014 09:29:55
Klaus
Hallo Luc,
du hast natürlich Recht! Ausgehend vom VBA-Level, dem Rekorder-Code mit fixem Druckbereich und der Fragestellung habe ich darauf mit Absicht verzichtet und stattdessen eine Insellösung präsentiert.
Ich hätte das ganze auch Schleifenfrei lösen können, oder ein Konstantes Range in ein Array einlesen und dort auf FALSCH-Werte überprüfen um Rechenzeit auf dem Tabellenblatt zu sparen, ausserdem eine vollständige Fehlerbehandlungsroutine drunter packen, die Absätze durchkommentieren und natürlich statt ungarischen Warzen lieber sprechende Variablenbezeichnungen nehmen sollen :-) Aber damit währ ich -etwas- übers Ziel hinaus geschossen, oder?
Grüße,
Klaus M.vdT.

Anzeige
Wenn du meinst, Klaus! ;-) Allerdings ...
23.01.2014 17:33:19
Luc:-?
…sollte, was ich schrieb, zum StandardRepertoire gehören!
Gruß Luc :-?

113 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige