Σου έδωσα ένα παράδειγμα χωρίς να γνωρίζω τυχόν ιδιαιτερότητες και λεπτομέρειες.
Ο κώδικας αυτός δεν έχει κάποιο λάθος.
Αυτά που κάνει είναι:
Ανοίγει ένα ένα τα βιβλία, εκτυπώνει τα φύλλα που πρέπει και τελικά τα κλείνει χωρίς αποθήκευση.
Αν υπάρχει το φύλλο (πχ, το φύλλο "ΑΠΟΔΕΙΞΕΙΣ") τότε αν υπάρχει "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
Φιλικά
Τάσος