in allegato una macro (che pescai tanto tempo fa da un sito) che stampa i fogli che vengono scelti attraverso una inputbox.
Bisogna impostare i parametri di stampa “a freddo”, poi si lancia la macro (anche in un secondo tempo) e nel box si sceglie quale foglio/i stampare.
Funzionava e funziona alla perfezione, mi sono accorto però, dopo averla reinserita in un nuovo file, che la stampante che si sceglie con la prima stampa non si può più cambiare. Stampo un foglio A1 con il plotter (database con moltissime colonne) che ho scelto nell’anteprima e per gli altri fogli A4, che magari scelgo con un successivo lancio della macro, non c’è modo di evere l'anteprima per cambiare la stampante. Compaiono in continuazione messaggi relativi ai margini anche se nelle impostazioni a freddo è inserito tutto correttamente. Bisogna uscire e riavviare Excel.
Avrei bisogno del Vs aiuto per risolvere l’arcano.
- Codice: Seleziona tutto
Private Sub StampaFogli()
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Application.ScreenUpdating = False
If ActiveWorkbook.ProtectStructure Then
MsgBox "Il foglio è protetto.", vbCritical
Exit Sub
End If
Set CurrentSheet = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
SheetCount = 0
TopPos = 40
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 150, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = _
CurrentSheet.Name
TopPos = TopPos + 13
End If
Next i
PrintDlg.Buttons.Left = 240
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "Fogli scelti da stampare"
End With
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
CurrentSheet.Activate
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
For Each cb In PrintDlg.CheckBoxes
If cb.Value = xlOn Then
Worksheets(cb.Caption).Activate
ActiveSheet.PrintPreview
'ActiveSheet.PrintOut 'HO INIBITO LA STAMPA
End If
Next cb
End If
Else
MsgBox "Tutti i fogli sono vuoti."
End If
Application.DisplayAlerts = False
PrintDlg.Delete
CurrentSheet.Activate
End Sub
Grazie dell'attenzione e dell'aiuto. Un cordiale saluto
Enrico