Εμφάνιση ενός μόνο μηνύματος
  #4  
Παλιά 11-06-12, 01:20
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Σου έδωσα ένα παράδειγμα χωρίς να γνωρίζω τυχόν ιδιαιτερότητες και λεπτομέρειες.

Ο κώδικας αυτός δεν έχει κάποιο λάθος.

Αυτά που κάνει είναι:

Ανοίγει ένα ένα τα βιβλία, εκτυπώνει τα φύλλα που πρέπει και τελικά τα κλείνει χωρίς αποθήκευση.

Αν υπάρχει το φύλλο (πχ, το φύλλο "ΑΠΟΔΕΙΞΕΙΣ") τότε αν υπάρχει "YES" στο κατάλληλο κελί κάθε φορά (στήλες E, J, O) θα επιχειρήσει να εκτυπώσει.
Αν δεν υπάρχει το φύλλο θα γράψει "Error!"

Αν η εκτύπωση σταλεί στον εκτυπωτή χωρίς να προκληθεί σφάλμα θα γράψει "ΟΚ!".
Διαφορετικά θα γράψει "Error!"

Αν στο κελί υπάρχει "NO" τότε ο κώδικας δεν θα προχωρήσει στην εκτύπωση του φύλλου και θα γράψει "No Action".

Αν ο εκάστοτε εκτυπωτής δεν εκτυπώσει τότε θα πρέπει να αναζητήσεις την αιτία του προβλήματος στον εκτυπωτή. Όχι στην Excel.

Αυτό ισχύει και για τον εκτυπωτή PDF.

Έκανες τις απαραίτητες ρυθμίσεις σ' αυτόν τον εκτυπωτή;

Παράθεση:
ενω τα 3 εχουν "NO" στις στηλες Ε, J, και Ο, και 1 "YES"
Το 1 "YES" τι είναι; Τέταρτο κελί Yes/No??

Δεν μπορώ να γνωρίζω τι δεν πάει καλά αφού το μόνο που βλέπω είναι το αρχείο Excel που επισύναψες. Δεν είμαι μπροστά στον υπολογιστή σου .

Αυτό που μπορώ να κάνω είναι να προσθέσω τη δυνατότητα ελέγχου αν και τα τρία φύλλα έχουν την τιμή "NO"
και έτσι να μην ανοίξει το βιβλίο χωρίς λόγο (δεν διευκρινίστηκε στο αρχικό σου μήνυμα).

Άλλαξε λοιπόν τον κώδικα του συνημμένου μου με τον παρακάτω:

Κώδικας:
Sub XLPrintJob()
    Dim wks As Worksheet, wb As Workbook, c As Range, i As Integer, x As Integer
    With Application
        .ShowWindowsInTaskbar = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    On Error Resume Next
    For Each c In ActiveSheet.Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row)
        x = 1
        If Dir(c.Value, vbDirectory) <> vbNullString Then
            If c.Offset(, 4).Value = "NO" And _
               c.Offset(, 9).Value = "NO" And _
               c.Offset(, 14).Value = "NO" Then GoTo NextWB

            Set wb = Workbooks.Open(Filename:=c.Value, ReadOnly:=True)
            For i = 1 To 3
                Set wks = wb.Sheets(c.Offset(, x).Value)
                If Err <> 0 Then
                    c.Offset(, 15 + i).Value = "Error!"
                    Err.Clear
                    GoTo NextWks
                End If
                If c.Offset(, x + 3).Value = "YES" Then
                    wks.PrintOut _
                            From:=c.Offset(, x + 1).Value, _
                            To:=c.Offset(, x + 2).Value, _
                            ActivePrinter:=c.Offset(, x + 4).Value, _
                            Collate:=True
                    If Err <> 0 Then
                        c.Offset(, 15 + i).Value = "Error!"
                        Err.Clear
                    Else
                        c.Offset(, 15 + i).Value = "OK!"
                    End If
                Else
                    c.Offset(, 15 + i).Value = "No Action"
                End If
NextWks:
                x = x + 5
            Next
            wb.Close SaveChanges:=False
        End If
NextWB:
    Next
    With Application
        .ShowWindowsInTaskbar = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With

End Sub
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 11-06-12 στις 10:47.
Απάντηση με παράθεση