Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Userform macht Probleme
#1
Hallo, habe eine Userform erstellt.
Im Prinzip ist es ein Checkboxfeld, welches die Tabellenblätter einer Excel anzeigt und es gibt die Schaltflächen "Drucken" (druckt die angeklickten Tabellenblätter) und "Anzeigen" (zeigt die Datei mit den Tabellenblätter an).
Es gibt aber 2 Probleme.
-Wenn ich mit X die Userform abbrechen will, öffnet er trotzdem die Exceldatei
-Er druckt immer das erste Tabellenblatt mit aus. Egal ob es ein Häckchen bekommen hat oder nicht

Weiß hier jemand einen Rat?
Code:
Option Explicit

Private Sub CmdAbbrechen_Click()
Unload Me
End Sub

Private Sub CmdDrucken_Click()
Dim intSh As Integer
Dim Msg As String
Dim intX As Integer
Dim bln As Boolean
Dim vntSheets() As Variant

'Prüfung ob etwas ausgewählt wurde
For intSh = 0 To Me.Listbox1.ListCount - 1
   If Me.Listbox1.Selected(intSh) Then
     bln = True
   End If
Next

If bln = False Then
MsgBox "Es wurde nichts ausgewählt", 48
Exit Sub
End If

If Me.OptionButton1.Value = True Then
 'Drucken der einzelnen Seiten
 If Me.Listbox1.ListCount > 0 Then
 Application.Dialogs(xlDialogPrint).Show '<-- Fenster zur Druckerauswahl aktiviert
   For intSh = 0 To Me.Listbox1.ListCount - 1
     If Me.Listbox1.Selected(intSh) Then
      Worksheets(Me.Listbox1.List(intSh)).PrintOut
      Msg = Msg & Me.Listbox1.List(intSh) & vbCr
     End If
    Next
   End If
     Else
 'Zusammenhängender Druck
 If Me.Listbox1.ListCount > 0 Then
 Application.Dialogs(xlDialogPrint).Show '<-- Fenster zur Druckerauswahl aktiviert
   For intSh = 0 To Me.Listbox1.ListCount - 1
     If Me.Listbox1.Selected(intSh) Then
       intX = intX + 1
       ReDim Preserve vntSheets(1 To intX)
       vntSheets(intX) = Me.Listbox1.List(intSh)
       Msg = Msg & Me.Listbox1.List(intSh) & vbCr
     End If
    Next
    ' ActiveWorkbook.Sheets(vntSheets).Select
 End If
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
 Worksheets(1).Select
End If

' MsgBox "Folgende Seiten wurden gedruckt:" & vbCr & vbCr & Msg   Meldung anzeigen

End Sub

Private Sub Label1_Click()

End Sub

Private Sub Listbox1_Click()

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
Dim intI As Integer

For intI = 1 To Worksheets.Count
If Worksheets(intI).Visible = True Then
 Me.Listbox1.AddItem Worksheets(intI).Name
End If
Next
Me.OptionButton1.Value = True
End Sub
Antworten Top
#2
Hallo Barthi,
wenn Du den Druckerauswahldialog statt des Druckdialogs verwendest, ist Problem 1 weg:
Application.Dialogs(xlDialogPrinterSetup).Show
Um das Workbook zu schließen, wenn über das Formularkreuz das Dialogfeld geschlossen wird, braucht es das Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'bei Schließen über Formular-Kreuz
If CloseMode = vbFormControlMenu Then ThisWorkbook.Close
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0

Gruß der AlteDresdner
Gruß der AlteDresdner (Win11, Off2021)
Antworten Top
#3
Hallo ebenfalls aus Sachsen :)
wie kann ich dein Lösungsvorschlag direkt in den Code einbauen? Kann es ja nicht einfach darunter setzen. Hast du evtl. auch ein Tipp für den "1. Seite-Fehler"?
Antworten Top
#4
Diese Code reicht (statt deine)


Code:
Private Sub CmdDrucken_Click()
  For j = 0 To listbox1.ListCount - 1
   If listbox1.Selected(j) Then Sheets(listbox1.List(j, 0)).PrintOut
  Next
End Sub

Private Sub UserForm_Initialize()
  For Each it In Sheets
    c00 = c00 & "|" & it.Name
  Next
  listbox1.List = Split(Mid(c00, 2), "|")
End Sub
Antworten Top
#5
(06.11.2016, 22:29)barth schrieb: wie kann ich dein Lösungsvorschlag direkt in den Code einbauen? Kann es ja nicht einfach darunter setzen. Hast du evtl. auch ein Tipp für den "1. Seite-Fehler"?

Hallo Barthi,
das Private Sub Userform_QueryClose gehört in den Codeteil der entsprechenden Userform.
Für Problem 'Seite 1' ersetze
Code:
 Application.Dialogs(xlDialogPrint).Show '<-- Fenster zur Druckerauswahl aktiviert
durch
Code:
 Application.Dialogs(xlDialogPrinterSetup).Show '<-- Fenster zur Druckerauswahl aktiviert

Der Code von snb ist natürlich wesentlich kürzer und eleganter...
Gruß der AlteDresdner
Gruß der AlteDresdner (Win11, Off2021)
Antworten Top
#6
Wow, ist ja Wahnsinn, wie man den ganzen Code hätte kürzen können. Habe das jetzt so von snb übertragen. Danke!
Leider öffnet er beim Xen trotzdem die andere Datei.
Antworten Top
#7
Welche 'andere' Datei ?

Es gibt doch nie ein Userform ohne Datei ?
Antworten Top
#8
(13.11.2016, 13:51)barthi schrieb: Leider öffnet er beim Xen trotzdem die andere Datei.
Hallo Barthi,
hast Du das obige Private Sub Userform_Queryclose... in den Codeteil der Userform eingefügt? Dann sollte die Datei eigentlich geschlossen und damit das Makro beendet werden.
Gruß der AlteDresdner
Gruß der AlteDresdner (Win11, Off2021)
Antworten Top
#9
Lösche die ganze Queryclose Code.
Antworten Top
#10
Schau mal die angehängte Datei


Angehängte Dateien
.xls   __liste snb.xls (Größe: 1,37 MB / Downloads: 17)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste