Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Ringo,
Grazie mille, se ho fatto giusto allora, qui dovrebbe trovarsi il file
https://www.dropbox.com/s/ho7nrjko1f3d0nh/Indirizzario%20da%20usare%2029.3.18.xlsm?dl=0
Ok file caricato in maniera corretta.
Unica precisazione, ho visto che le date sono in formato diverso da come le uso il, il mio file ha le date "dddd, dd. mmmm yyyy".
Ho scaricato il tuo file.
Innanzitutto, nota che il tuo codice dovrrebbe trovarsi in un modulo di codice standard anzichè nel modulo di codice del foglio.
Per approfondire la questione del posizionamento di codice, ti consiglio l'articolo wiki di Fratello Mauro:
Excel - Dove e come inserire il codice Visual Basic - VBA (Update)
Quindi, cancella il tuo codice esistenti e prova invece qualcosa del genere:
- Alt+F11 per aprire l'editor di VBA
- Alt+IMper inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet, newSH As Worksheet
Dim Rng As Range, Rng2 As Range, rCell As Range
Dim i As Long, LRow As Long
Dim CalcMode As Long
Const sFoglio As String = "DB" '<<=== Modifica
Const sColonnaDate As String = "B" '<<=== Modifica
Const sColonneDaStampare As String = "A:D" '<<=== Modifica
Const sPercorso As String = _
"C:\Users\Ringo\Documents\Pensioni Animali.pdf" '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
SH.Copy
Set newSH = ActiveSheet
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With newSH
LRow = LastRow(SH, .Columns(sColonnaDate))
Set Rng = Intersect(.Rows(1).Resize(LRow), _
.Columns(sColonneDaStampare))
For i = 2 To LRow
If .Cells(i, "B").Value >= Date Then
.Rows(2).Resize(i - 2).Delete
Exit For
End If
Next i
End With
Rng.Select
Rng.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPercorso _
, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
ActiveWorkbook.Close SaveChanges:=False
XIT:
With Application
.Calculation = CalcMode
.ScreenUpdating = True
End With
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1, _
Optional sPassword As String)
Dim bProtected As Boolean
With SH
If Rng Is Nothing Then
Set Rng = .Cells
End If
bProtected = .ProtectContents = True
If bProtected Then
.Unprotect Password:=sPassword
End If
End With
On Error Resume Next
LastRow = Rng.Find(What:="*", _
after:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
If bProtected Then
SH.Protect Password:=sPassword, _
UserInterfaceOnly:=True
End If
End Function
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
- Alt+F8 per aprire la finestra di gestione delle macro
- Seleziona Tester
- Esegui
===
Regards,
Norman