Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
952to956
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
952to956
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Druckfenster modifizieren - Useform

Druckfenster modifizieren - Useform
20.02.2008 23:33:10
Wrobel
Hallo Excel-Profi´s!
Habe mir ein Druckfenster (Useform) erstellt, siehe Datei www.herber.de/bbs/user/50066.xls ,
nur habe ich keine Ahnung wie ich jetzt den Rest modifizieren kann.
Folgende Änderungen habe ich vor s.u., nur bin ich VBA-Anfänger. Und mit dieser Sache völlig überfragt!
Ich wäre echt für jede Hilfe dankbar!!!
Hoffe es ist umsetzbar.
Gruß
André
____
Papierauswahl:
Habe das Feld Papierauswahl hinzugefügt. Wenn ich jetzt einen Drucker habe der A4 unterstützt möchte ich, dass dort A4 zur Auswahl steht. Falls der Drucker A4 und A3 unterstützt möchte ich A4 und A3 zur Auswahl haben. (Drucker wird öfters gewechselt)
Anzahl Exemplare
Hier habe ich das Drop-Down-Feld hinzugefügt. Ist es hier möglich eine Auswahl von bis zu zehn stehen zu haben? Das Feld links daneben kann deaktiviert werden.
Von Seite / Bis Seite
Hier habe ich ebenfalls die Drop-Down-Felder hinzugefügt. Ist es hier ebenfalls möglich eine Auswahl bis zu zehn vorzugeben. Die jeweils darüber stehenden Felder können deaktiviert werden.
Blätter
(Denke mal das komplizierteste Feld.)
Habe mir vorgestellt hier die Tabellen anzeigen zu lassen, die wirklich benötigt werden. In diesem Beispiel habe ich die Tabellen welche nicht gebraucht werden „Überflüssig 1,2,3“ genannt.
Habe mir vorgestellt die Tabellen mit den nicht in Klammer stehenden Namen ausschließen.
(Ersichtlich wenn man auf Tabelle 1 – Rechtsklick – Code anzeigen sagt.)
D.h.: Tabelle1 (Tabelle1), Tabelle2 (Tabelle2), Tabelle4 (Überflüssig1), Tabelle5 (Überflüssig2), Tabelle3 (Überflüssig3).
Hoffe du kannst mir dabei helfen, dies ich so ziemlich der letzte Schritt zur Fertigstellung meiner Tabellenvorlage.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Teil 1 - Unterstützte Papierformate
21.02.2008 01:38:00
Nepumuk
Hallo André,
einbaue tu ich's dir nicht, nur zeigen wie's geht.
' **********************************************************************
' Modul: Modul14 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub Test14A()
    
    Dim objWMI As Object, objItem As Object
    Dim vntTempArray As Variant, vntPaperSize As Variant
    Dim lngPaperSizesArray() As Long, lngTemp As Long
    Dim intIndex As Integer, intCounter As Long
    
    'Alle möglichen Papierformate
    vntPaperSize = Array("Unbekannt", "Andere", "A", "B", "C", "D", "E", "Brief", "Legal", _
        "NA-10x13 Umschlag", "NA-9x12 Umschlag", "NA-Number-10 Umschlag", "NA-7x10 Umschlag", _
        "NA-9x11 Umschlag", "NA-10x14 Umschlag", "NA-Number-9 Umschlag", "NA-6x9 Umschlag", _
        "NA-10x15 Umschlag", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9A10", _
        "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "C0", "C1", "C2C3", _
        "C4", "C5", "C6", "C7", "C8", "ISO-designiert", "JIS B0", "JIS B1", "JIS B2", "JIS B3", _
        "JIS B4", "JIS B5", "JIS B6", "JIS B7", "JIS B8", "JIS B9", "JIS B10", "Nicht zutreffend-Letter", _
        "Nicht zutreffend-Legal", "Umschlag B4", "Umschlag B5", "Umschlag C3", "Umschlag C4", "Umschlag C5", _
        "Umschlag C6", "Designierter langer Umschlag", "Umschlag Monarch", "Ausführen", "Folio", "Rechnung", _
        "Ledger", "Quartet")
    
    'Druckereigenschaften auslesen
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
        ExecQuery("Select * from Win32_Printer where Name='Adobe PDF'")
    
    'Papierformate auslesen
    For Each objItem In objWMI
        vntTempArray = objItem.PaperSizesSupported
    Next
    
    'Papiersorten sortieren
    Call Quick_Sort(LBound(vntTempArray), UBound(vntTempArray), vntTempArray)
    
    'Papiersorten verdichten
    For intIndex = LBound(vntTempArray) To UBound(vntTempArray)
        If lngTemp <> vntTempArray(intIndex) Then
            intCounter = intCounter + 1
            Redim Preserve lngPaperSizesArray(1 To intCounter)
            lngPaperSizesArray(intCounter) = vntTempArray(intIndex)
            lngTemp = vntTempArray(intIndex)
        End If
    Next
    
    'Papiersorten ausgeben
    For intIndex = 1 To intCounter
        MsgBox vntPaperSize(lngPaperSizesArray(intIndex))
    Next
    
End Sub

Private Sub Quick_Sort(lngLBound As Long, lngUBound As Long, varArray As Variant)
    Dim lngIndex1 As Long, lngIndex2 As Long
    Dim varTemp As Variant, varBuffer As Variant
    lngIndex1 = lngLBound
    lngIndex2 = lngUBound
    varBuffer = varArray(Fix(lngLBound + lngUBound) / 2)
    Do
        Do While varArray(lngIndex1) < varBuffer
            lngIndex1 = lngIndex1 + 1
        Loop
        Do While varBuffer < varArray(lngIndex2)
            lngIndex2 = lngIndex2 - 1
        Loop
        If lngIndex1 <= lngIndex2 Then
            varTemp = varArray(lngIndex1)
            varArray(lngIndex1) = varArray(lngIndex2)
            varArray(lngIndex2) = varTemp
            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1
        End If
    Loop Until lngIndex1 > lngIndex2
    If lngLBound < lngIndex2 Then Call Quick_Sort(lngLBound, lngIndex2, varArray)
    If lngIndex1 < lngUBound Then Call Quick_Sort(lngIndex1, lngUBound, varArray)
End Sub

Gruß
Nepumuk

Anzeige
AW: Teil 1 - Unterstützte Papierformate
21.02.2008 09:56:00
Wrobel
Hallo Nepumuk,
hossa ist das ein Code!
Ich werde mich erstmal selbst daran versuchen.
Vielen Dank erstmal!
Gruß
André

AW: Teil 1 - Unterstützte Papierformate
21.02.2008 20:23:24
Wrobel
Hallo Nepumuk,
habe es ausprobiert, allerdings habe überhaupt kein Plan warum es nicht funktioniert!
Habe deine Befehle in verschiedenen Konstelationen gesetzt. Aber da passiert wirklich nichts!!!
Habe es z.B. so gesetzt, aber das geht überhaupt nicht. Der Dropdown ist immer leer.
Würdest du mir ein Trick verraten damit es funktioniert?
Gruß
Andre

Public Sub Test14A()
Dim objWMI As Object, objItem As Object
Dim vntTempArray As Variant, vntPaperSize As Variant
Dim lngPaperSizesArray() As Long, lngTemp As Long
Dim intIndex As Integer, intCounter As Long
'Alle möglichen Papierformate
vntPaperSize = Array("Unbekannt", "Andere", "A", "B", "C", "D", "E", "Brief", "Legal", _
"NA-10x13 Umschlag", "NA-9x12 Umschlag", "NA-Number-10 Umschlag", "NA-7x10 Umschlag", _
"NA-9x11 Umschlag", "NA-10x14 Umschlag", "NA-Number-9 Umschlag", "NA-6x9 Umschlag", _
"NA-10x15 Umschlag", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9A10", _
"B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "C0", "C1", "C2C3",  _
_
"C4", "C5", "C6", "C7", "C8", "ISO-designiert", "JIS B0", "JIS B1", "JIS B2", "JIS B3",  _
_
"JIS B4", "JIS B5", "JIS B6", "JIS B7", "JIS B8", "JIS B9", "JIS B10", "Nicht  _
zutreffend-Letter", _
"Nicht zutreffend-Legal", "Umschlag B4", "Umschlag B5", "Umschlag C3", "Umschlag C4", " _
Umschlag C5", _
"Umschlag C6", "Designierter langer Umschlag", "Umschlag Monarch", "Ausführen", "Folio", _
"Rechnung", _
"Ledger", "Quartet")
End Sub


Anzeige
AW: Teil 1 - Unterstützte Papierformate
22.02.2008 01:56:19
Nepumuk
Hallo André,
ich hab mich jetzt für die API - Variante entschieden. Die ist doch entschieden schneller als WMI.
Hier mal der etwas zurechtgestutzte Code deines Userforms. Zu mehr hab ich heute keine Lust.
Ich frag mich jetzt eigentlich nur, wie du dem ausgewählten Drucker beibringen willst, auf welches Papierformat er drucken soll. Ich weiß natürlich wie das geht, aber das sind gut 200 Zeilen Code unter Zuhilfenahme von mehreren API - Funktionen. Also Code, den du, wenn du dich täglich mehrere Stunden damit auseinandersetzt, in ein paar Jahren verstehen wirst.
Warum willst du überhaupt das Rad neu erfinden? Was gefällt dir nicht an dem Standarddialog bei dem alles automatisch funktioniert und nicht mit immensem Aufwand nachprogrammiert werden muss?
VBA bescheiden und so ein Vorhaben, ist wie nach bestandenem Dreiradführerschein in einen Ferrari zu steigen. Einfach ein paar Nummern zu groß.
' **********************************************************************
' Modul: Drucken Typ: Userform
' **********************************************************************

Option Explicit

Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
    ByVal lpDeviceName As String, _
    ByVal lpPort As String, _
    ByVal iIndex As Long, _
    ByRef lpOutput As Any, _
    ByVal dev As Long) As Long

Private Const DC_PAPERS As Long = 2&
Private Const DC_PAPERNAMES As Long = 16&

Private Sub UserForm_Initialize()
    Dim objWorksheet As Worksheet
    AktiverDrucker.Caption = Application.ActivePrinter
    Call prcShowPaperSize
    For Each objWorksheet In ThisWorkbook.Worksheets
        If Left$(objWorksheet.Name, 11) <> "Überflüssig" Then _
            cbbBlaetter.AddItem objWorksheet.Name
    Next
    ComboBox1.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode <> vbFormCode Then
        MsgBox "Beenden? - Gibt doch so´n Butten wo Abbrechen draufsteht... André ;-))", _
            vbInformation, "Hinweis"
        Cancel = True
    End If
End Sub

Private Sub cmbCancel_Click()
    Unload Me
End Sub

Private Sub cbtDruck_Click()
    Dim Blattname As String
    Dim Druck As String
    Dim Von As String
    Dim Bis As String
    Dim LoI As Long
    For LoI = 0 To cbbBlaetter.ListCount - 1
        If cbbBlaetter.Selected(LoI) Then
            Blattname = cbbBlaetter.List(LoI)
            Druck = txbAnzEx
            Von = txtVon
            Bis = txtBis
            If txtVon = "" Then
                Sheets(Blattname).Range("A1:N" & Cells(Rows.Count, 2).End(xlUp).Row). _
                    PrintOut Copies:=Druck
            Else
                Sheets(Blattname).Range("A1:N" & Cells(Rows.Count, 2).End(xlUp).Row). _
                    PrintOut From:=Von, to:=Bis, Copies:=Druck
            End If
        End If
    Next LoI
    Unload Me
End Sub

Private Sub cmbDrWechsel_Click()
    Me.Hide
    Application.Dialogs(xlDialogPrinterSetup).Show
    AktiverDrucker.Caption = Application.ActivePrinter
    Call prcShowPaperSize
    Me.Show
End Sub

Private Sub txbAnzEx_Change()
    cbtDruck.Enabled = True
End Sub

Private Sub prcShowPaperSize()
    
    Dim intPaperCount As Integer
    Dim lngPapers As Long, lngPaperNumbers() As Long
    Dim strPaperName As String, strPaperList As String
    Dim strDeviceName As String, strPort As String
    
    strDeviceName = Trim$(Split(Application.ActivePrinter, "auf")(0))
    strPort = Trim$(Split(Application.ActivePrinter, "auf")(1))
    
    ComboBox4.Clear
    
    lngPapers = DeviceCapabilities(strDeviceName, strPort, DC_PAPERS, ByVal vbNullString, 0&)
    
    If lngPapers > 0 Then
        
        Redim lngPaperNumbers(1 To lngPapers)
        lngPapers = DeviceCapabilities(strDeviceName, strPort, DC_PAPERS, lngPaperNumbers(1), 0&)
        
        strPaperList = String$(64 * lngPapers, 0)
        lngPapers = DeviceCapabilities(strDeviceName, strPort, DC_PAPERNAMES, ByVal strPaperList, 0&)
        
        For intPaperCount = 1 To lngPapers
            
            strPaperName = Mid(strPaperList, 64 * (intPaperCount - 1) + 1, 64)
            ComboBox4.AddItem Left$(strPaperName & vbNullChar, InStr(strPaperName, vbNullChar) - 1)
            
        Next
        
    Else
        MsgBox "Druckertreiber unterstützt das auslesen von Papierformaten nicht!", vbCritical, "Fehler"
    End If
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Teil 1 - Unterstützte Papierformate
22.02.2008 09:08:00
Wrobel
Hallo Nepumuk,
ich weiß weder noch was API noch WMI ist...
Also hätte ich gewusst, wie wahnsinnig aufwändig mit dem Papierformat ist, hätte ich die Frage natürlich nicht gestellt. Aber okay, die Sache hat sich hiermit erledigt!
Wäre aber nett wenn du mir bei den anderen Dingen weiterhelfen könntest. (Anzahl der zu druckenden Exemplare, Von Seite / Bis Seite und die Sache mit den Blätter was eigentlich für mich das wichtigste wäre.
Nur mal so´ne Frage am Rande wenn gestattet. Wie lange hast dir denn schon Kenntnisse in Excel bzw. VBA angeeignet?
Gruß
André

Anzeige
AW: Teil 1 - Unterstützte Papierformate
22.02.2008 09:29:30
Nepumuk
Hallo André,
ich mach seit fast 30 Jahren Softwareentwicklung. VB ca. 25 Jahre (vorher Assembler und RPG II) Excel gut 17 Jahre.
Gruß
Nepumuk

AW: Teil 1 - Unterstützte Papierformate
22.02.2008 17:00:06
Wrobel
Hallo Nepumuk!
Hut ab, na dann ist das Forum hier wohl deine Freizeitbeschäftigung oder wie darf ich´s deuten. Denn als Softwareentwickler sollte man ja nicht schlecht dran sein...
Zurück und Vielen Dank nochmal zu deinem Code. Nur wie füge ich den nun ein? Ich bekomme dies einfach nicht hin, (stehe wie ein Ochs vorm Berg) denn mit Userform habe ich jetzt das aller erste mal Kontakt! Ist es denn nicht für dich ein Klacks in meiner Druckmaske den Befehl von Eingabefeld in Drop-Down Feld bis 10 zu ändern? Und in dem Feld "Blätter" die "Überflüssigigen" Tabellen auszublenden?
Würde mich echt freuen, wenn du es mir kurz in die Datei schreiben und mir zur Verfügung stellen würdest. Dann habe ich endlich so ziemlich das letzte meiner Vorlage fertig. Wo ich (darf man garnicht erzählen) schon ca. 6 Monate dran "rumdoktere" natürlich mit Unterbrechung. Hättest du bestimmt in einer Std. fertig oder so. :-)
Vielen Dank!
Gruß
André aus SH

Anzeige
AW: Teil 1 - Unterstützte Papierformate
23.02.2008 12:16:00
Nepumuk
Hallo André,
na das mit der Combobox und den Tabellen hab ich doch schon letztes mal eingebaut. Schmeiß mal alles überflüssige aus dem Form raus und fang einen neuen Thread an. Wir sind nämlich schon ins Archiv gerutscht und andere können nicht mehr aktuell mitlesen was wir treiben.
Gruß
Nepumuk

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige