'
Option Explicit
' vbs - copia ad intervalli predefini i file elencati in un file di testo
' fnomearchivio: contiene il path completro dei file da copiare.
' fileultimalettura: contiene la data dell'ultima copia eseguita.
' cartelladovescrivere: il mome della cartella dove copiare i file.
' dopogiorni: in giorni la periodicità della copia
'
dim fileultimalettura, contenutoletto, dataultimocontrollo, dataoggi, differenzagiorni, dopogiorni, fnomearchivio, cartelladovescrivere
fileultimalettura = "C:\installazioni-in-lavorazione\data-ultima-copia.txt"
' solo copia - configurazione
fnomearchivio = "C:\installazioni-in-lavorazione\elenco-file-installazione.txt"
cartelladovescrivere = "C:\cartella-di-sincronizzazione\installazioni-da-distribuire\"
dopogiorni = 7 ' il numero dei giorni di attesa prima di una nuova copia
dataoggi = Now ' data odierna
' = legge il file parametri - se non esiste lo crea con il valore di default passato
Call LeggioCreaFileParametri(fileultimalettura, dataoggi)
'
dataultimocontrollo = contenutoletto
'
differenzagiorni = DateDiff("y", dataultimocontrollo, dataoggi)
if differenzagiorni >= dopogiorni then
'Msgbox "da fare"
call leggielenco(fnomearchivio)
Call ScriviFileJolly(fileultimalettura, dataoggi)
end if
'
' === legge i nomi dei file da copiare ===
sub leggielenco(filedaleggere)
dim objFSO, objFile, strLine, nomearchivio
'
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filedaleggere, 1)
'
Do While objFile.AtEndOfStream = False
strLine = trim(objFile.ReadLine)
if len(strLine) > 0 then
nomearchivio = objFSO.GetFileName(strLine)
objFSO.CopyFile strLine, cartelladovescrivere & nomearchivio
end if
'
Loop
'
end sub
' ==== ====
Sub LeggioCreaFileParametri(sFileName, valoredefault)
'
dim objFSO, objFile, strLine
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(sFilename) Then
'esistefile = "si"
Set objFile = objFSO.OpenTextFile(sFileName, 1)
'contenutoletto = objFile.Readall
contenutoletto = objFile.ReadLine
Else
'esistefile = "no"
contenutoletto = valoredefault
Set objFile = objFSO.CreateTextFile(sFileName, TRUE)
objFile.WriteLine(valoredefault)
End If
'
Set objFile = Nothing
Set objFSO = Nothing
'
End sub
' ==== ====
Sub ScriviFileJolly(NomeArchivio, cosascrivere)
dim fso, rifefile
Set fso=CreateObject("Scripting.FileSystemObject")
Set rifefile = fso.CreateTextFile(NomeArchivio, TRUE)
rifefile.WriteLine(cosascrivere)
rifefile.Close
set rifefile = Nothing
End Sub
'
' === ==================
giovedì 28 agosto 2014
spegni il computer - vbs
'
option explicit
'
'' -s SHUTDOWN (spegne computer)' -r REBOOT (riavvia)' -t (secondi di attesa prima dello spegnimento o del riavvio)
dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.run ("shutdown -s -t 0")
option explicit
'
'' -s SHUTDOWN (spegne computer)' -r REBOOT (riavvia)' -t (secondi di attesa prima dello spegnimento o del riavvio)
dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.run ("shutdown -s -t 0")
lunedì 21 luglio 2014
Scrive elenco email controlla indirizzi
Attribute VB_Name = "Scrive_eleno_email_controlla"
'
Option Explicit
'
'
' vba - scrive in un file di testo gli indirizzi email presenti nel foglio
' ci sono tre colonne che contengono indirizzi email
' toglie gli indirizzi dupulicati.
' esclude i nominativi presenti nel foglio esclusi.
'
Sub ScriviEmailFoglioClientiTogleEsclusi()
Dim quanterighe, contarighe, foglio
Dim testo, contali, contocliente, posizione2, nomefoglio
Dim emailcommerciale, emailamministrazione, altraemail, colonnaconto
nomefoglio = "lista"
Set foglio = Sheets(nomefoglio)
'
quanterighe = Range(foglio.UsedRange.Cells(foglio.UsedRange.Rows.Count, 1).Address).Row
'
colonnaconto = "A" ' colonna con il conto cliente
contarighe = 1
testo = ""
contali = 0
While contarighe <= quanterighe
contocliente = foglio.Cells(contarighe, colonnaconto).Value
emailcommerciale = CStr(Trim(foglio.Cells(contarighe, "C").Value))
emailamministrazione = CStr(Trim(foglio.Cells(contarighe, "D").Value))
altraemail = CStr(Trim(foglio.Cells(contarighe, "E").Value))
If Len(emailcommerciale) = 0 Then
emailcommerciale = emailamministrazione
End If
posizione2 = Application.Match(contocliente, Worksheets("esclusi").Range("A:A"), 0)
If IsError(posizione2) Then
' MsgBox "Not Found"
testo = testo & estraiEmail(CStr(Trim(emailcommerciale))) ' email
testo = testo & estraiEmail(CStr(Trim(altraemail))) ' email
contali = contali + 1
Else
' MsgBox "Found"
End If
'
contarighe = contarighe + 1
Wend
' === il tuo indirizzo email
testo = testo & " indirizzo @ dominio . it - com ;"
'
' === elminani indirizzi email duplicati
testo = trovaunici(testo, ";")
'
' === scrivi risultato in file di testo
Dim fs, a
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("C:\" & nomefoglio & ".txt", True)
a.WriteLine (testo)
a.Close
'
'
End Sub
'
'
' === vba. verifica che il testo passato sia un indirizzo email.
'
Function estraiEmail(text As String) As String
Dim result As String, i, j
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
'RE.Pattern = "^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$"
RE.Pattern = "[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
RE.Global = True
RE.IgnoreCase = True
Set allMatches = RE.Execute(text)
'
result = ""
'
For i = 0 To allMatches.Count - 1
result = result & allMatches.Item(i) & "; "
Next
'
estraiEmail = result
'
End Function
'
'
' vba. toglie gli indirizzi duplicati.
'
Function trovaunici(pvalori, separatore)
Dim valori, contali, quanti, valore, dizionario
valori = Split(pvalori, separatore)
quanti = UBound(valori)
Set dizionario = CreateObject("Scripting.Dictionary")
dizionario.CompareMode = vbTextCompare
For contali = 0 To quanti
valore = valori(contali)
If (dizionario.Exists(valore) = False) Then
dizionario.Add valore, True
End If
Next contali
'
Dim trovati, trovato, testo
trovati = dizionario.Keys
testo = ""
'
For Each trovato In trovati
testo = testo & trovato & "; "
Next
'
trovaunici = testo
'
End Function
'
Option Explicit
'
'
' vba - scrive in un file di testo gli indirizzi email presenti nel foglio
' ci sono tre colonne che contengono indirizzi email
' toglie gli indirizzi dupulicati.
' esclude i nominativi presenti nel foglio esclusi.
'
Sub ScriviEmailFoglioClientiTogleEsclusi()
Dim quanterighe, contarighe, foglio
Dim testo, contali, contocliente, posizione2, nomefoglio
Dim emailcommerciale, emailamministrazione, altraemail, colonnaconto
nomefoglio = "lista"
Set foglio = Sheets(nomefoglio)
'
quanterighe = Range(foglio.UsedRange.Cells(foglio.UsedRange.Rows.Count, 1).Address).Row
'
colonnaconto = "A" ' colonna con il conto cliente
contarighe = 1
testo = ""
contali = 0
While contarighe <= quanterighe
contocliente = foglio.Cells(contarighe, colonnaconto).Value
emailcommerciale = CStr(Trim(foglio.Cells(contarighe, "C").Value))
emailamministrazione = CStr(Trim(foglio.Cells(contarighe, "D").Value))
altraemail = CStr(Trim(foglio.Cells(contarighe, "E").Value))
If Len(emailcommerciale) = 0 Then
emailcommerciale = emailamministrazione
End If
posizione2 = Application.Match(contocliente, Worksheets("esclusi").Range("A:A"), 0)
If IsError(posizione2) Then
' MsgBox "Not Found"
testo = testo & estraiEmail(CStr(Trim(emailcommerciale))) ' email
testo = testo & estraiEmail(CStr(Trim(altraemail))) ' email
contali = contali + 1
Else
' MsgBox "Found"
End If
'
contarighe = contarighe + 1
Wend
' === il tuo indirizzo email
testo = testo & " indirizzo @ dominio . it - com ;"
'
' === elminani indirizzi email duplicati
testo = trovaunici(testo, ";")
'
' === scrivi risultato in file di testo
Dim fs, a
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("C:\" & nomefoglio & ".txt", True)
a.WriteLine (testo)
a.Close
'
'
End Sub
'
'
' === vba. verifica che il testo passato sia un indirizzo email.
'
Function estraiEmail(text As String) As String
Dim result As String, i, j
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
'RE.Pattern = "^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$"
RE.Pattern = "[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
RE.Global = True
RE.IgnoreCase = True
Set allMatches = RE.Execute(text)
'
result = ""
'
For i = 0 To allMatches.Count - 1
result = result & allMatches.Item(i) & "; "
Next
'
estraiEmail = result
'
End Function
'
'
' vba. toglie gli indirizzi duplicati.
'
Function trovaunici(pvalori, separatore)
Dim valori, contali, quanti, valore, dizionario
valori = Split(pvalori, separatore)
quanti = UBound(valori)
Set dizionario = CreateObject("Scripting.Dictionary")
dizionario.CompareMode = vbTextCompare
For contali = 0 To quanti
valore = valori(contali)
If (dizionario.Exists(valore) = False) Then
dizionario.Add valore, True
End If
Next contali
'
Dim trovati, trovato, testo
trovati = dizionario.Keys
testo = ""
'
For Each trovato In trovati
testo = testo & trovato & "; "
Next
'
trovaunici = testo
'
End Function
mercoledì 26 marzo 2014
taglia pdf - vbs
'
Option explicit
'
' vbs - drag and drop
' utilizza Ghostscript per ritagliare una parte di un file pdf.
'
' FORMAT_A4 PDF = 595.28 841.89
'
Dim objA
Set objA = Wscript.Arguments
if objA.count = 0 Then
Wscript.Echo "Serve almeno 1 file pdf " ' verifica che ci siano argomenti
Wscript.Quit
End If
'
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
dim quantifile, contali, nomefile, filepdf, suffisso, nomefilepdf
'
quantifile = objA.count - 1
' ricerca file pdf passatti come argomenti
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "pdf" then
filepdf = nomefile
nomefilepdf = objFSO.GetFileName(nomefile)
call croppdf(filepdf, nomefilepdf)
end if
next
'
sub croppdf(filedatagliare, pnomefilepdf)
'
Dim wsh, esegui, attesa
Set wsh = CreateObject("WScript.Shell")
'
esegui = ""
esegui = esegui & "C:\Programmi\gs\gs8.64\bin\gswin32 -sDEVICE=pdfwrite -o "
esegui = esegui & " C:\pdf\" & pnomefilepdf
' [da sinistra] [dal basso] [da destra ] [dall alto]
esegui = esegui & " -c ""[/CropBox [0 610 595 841 ] /PAGES pdfmark"" -f "
esegui = esegui & filedatagliare
attesa = wsh.Run (esegui, 1, true) '
'
end sub
' ====
Option explicit
'
' vbs - drag and drop
' utilizza Ghostscript per ritagliare una parte di un file pdf.
'
' FORMAT_A4 PDF = 595.28 841.89
'
Dim objA
Set objA = Wscript.Arguments
if objA.count = 0 Then
Wscript.Echo "Serve almeno 1 file pdf " ' verifica che ci siano argomenti
Wscript.Quit
End If
'
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
dim quantifile, contali, nomefile, filepdf, suffisso, nomefilepdf
'
quantifile = objA.count - 1
' ricerca file pdf passatti come argomenti
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "pdf" then
filepdf = nomefile
nomefilepdf = objFSO.GetFileName(nomefile)
call croppdf(filepdf, nomefilepdf)
end if
next
'
sub croppdf(filedatagliare, pnomefilepdf)
'
Dim wsh, esegui, attesa
Set wsh = CreateObject("WScript.Shell")
'
esegui = ""
esegui = esegui & "C:\Programmi\gs\gs8.64\bin\gswin32 -sDEVICE=pdfwrite -o "
esegui = esegui & " C:\pdf\" & pnomefilepdf
' [da sinistra] [dal basso] [da destra ] [dall alto]
esegui = esegui & " -c ""[/CropBox [0 610 595 841 ] /PAGES pdfmark"" -f "
esegui = esegui & filedatagliare
attesa = wsh.Run (esegui, 1, true) '
'
end sub
' ====
martedì 25 marzo 2014
unisci Fdf a Pdf - vbs
'
'
' vbs - unisce i valori contenuti in un file Fdf
' nel file Pdf editabile contenente i relativi campi.
'
Option explicit
'
Dim objA
Set objA = Wscript.Arguments
if objA.count = 0 Then
Wscript.Echo "Servono almeno due file: uno pdf e uno fdf"
Wscript.Quit
End If
'
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
'
dim quantifile, contali, nomefile, filepdf, suffisso
quantifile = objA.count - 1
' ricerca il file pdf
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "pdf" then
filepdf = nomefile
end if
next
'
' ricerca i fle fdf
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "fdf" then
call stampapdf(nomefile) ' stampa i file unisce fdf a pdf
call muovifile(nomefile) ' il file pdf generato assume il nome del file fdf
end if
next
'
' ===
sub muovifile(pnomefile)
Dim objFSO, origine, destinazione
Set objFSO = CreateObject("Scripting.FileSystemObject")
'
origine = "C:\pdf\770ED.pdf" ' file Pdf con i campi da compilare
destinazione = "C:\pdf\" & objFSO.GetBaseName(pnomefile) & ".pdf" ' nome file Fdf senza suffisso
'
objFSO.MoveFile origine, destinazione
end sub
' =====
sub stampapdf(strPDFpath)
'
Dim objPrinter, stampantepredefinita
Set objPrinter = CreateObject("WScript.Network")
objPrinter.SetDefaultPrinter "PDFCreator" ' assegna la stampante pdf come predefinita
'
Dim wsh, esegui, attesa
Set wsh = CreateObject("WScript.Shell")
'
'esegui = "acrord32.exe /p /h """ & strPDFpath
esegui = "acrord32.exe /t /h """ & strPDFpath
'attesa = wsh.Run (esegui, 1, true) ' nel caso si voglia chiudere manualmente il file pdf
wsh.Run esegui
'
WScript.Sleep 15000 ' attende 15 secondi prima di terminare Adobe
'
objPrinter.SetDefaultPrinter "AMMINISTRA" ' ripristina la stampante predefinita
'
dim strComputer, objWMIService, colProcessList, objProcess
strComputer = "."
Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'acrord32.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
'
end sub
' =================
'
' vbs - unisce i valori contenuti in un file Fdf
' nel file Pdf editabile contenente i relativi campi.
'
Option explicit
'
Dim objA
Set objA = Wscript.Arguments
if objA.count = 0 Then
Wscript.Echo "Servono almeno due file: uno pdf e uno fdf"
Wscript.Quit
End If
'
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
'
dim quantifile, contali, nomefile, filepdf, suffisso
quantifile = objA.count - 1
' ricerca il file pdf
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "pdf" then
filepdf = nomefile
end if
next
'
' ricerca i fle fdf
for contali = 0 to quantifile
nomefile = trim(obja(contali))
suffisso = lcase(objFSO.GetExtensionName(nomefile))
if suffisso = "fdf" then
call stampapdf(nomefile) ' stampa i file unisce fdf a pdf
call muovifile(nomefile) ' il file pdf generato assume il nome del file fdf
end if
next
'
' ===
sub muovifile(pnomefile)
Dim objFSO, origine, destinazione
Set objFSO = CreateObject("Scripting.FileSystemObject")
'
origine = "C:\pdf\770ED.pdf" ' file Pdf con i campi da compilare
destinazione = "C:\pdf\" & objFSO.GetBaseName(pnomefile) & ".pdf" ' nome file Fdf senza suffisso
'
objFSO.MoveFile origine, destinazione
end sub
' =====
sub stampapdf(strPDFpath)
'
Dim objPrinter, stampantepredefinita
Set objPrinter = CreateObject("WScript.Network")
objPrinter.SetDefaultPrinter "PDFCreator" ' assegna la stampante pdf come predefinita
'
Dim wsh, esegui, attesa
Set wsh = CreateObject("WScript.Shell")
'
'esegui = "acrord32.exe /p /h """ & strPDFpath
esegui = "acrord32.exe /t /h """ & strPDFpath
'attesa = wsh.Run (esegui, 1, true) ' nel caso si voglia chiudere manualmente il file pdf
wsh.Run esegui
'
WScript.Sleep 15000 ' attende 15 secondi prima di terminare Adobe
'
objPrinter.SetDefaultPrinter "AMMINISTRA" ' ripristina la stampante predefinita
'
dim strComputer, objWMIService, colProcessList, objProcess
strComputer = "."
Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'acrord32.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
'
end sub
' =================
giovedì 6 marzo 2014
P
'
' vbs - Microsoft Outlook Exchange 2000
' elenca tutte le cartelle pubbliche
'
'
Option Explicit
'
dim NomeArchivio, cosascrivere
NomeArchivio="C:\elenco-cartelle-exchange.txt" '
'
call cancellazioneiniziale(NomeArchivio)
'
call ElencaCartellePubbliche
' ===============
sub ElencaCartellePubbliche()
Dim objFolder, objNamespace, objOutlook
'
Const TipoCartella = 18 ' cartelle pubbliche ' 5 = Sent Items
'
Set objOutlook = CreateObject( "Outlook.Application" )
Set objNamespace = objOutlook.GetNamespace( "MAPI" )
'
objNamespace.Logon "Default Outlook Profile", , False, False
Set objFolder = objNamespace.GetDefaultFolder( TipoCartella )
'
Dim scartelle
'
for each scartelle in objFolder.folders
'msgbox scartelle.Name
cosascrivere = scartelle.Name
Call ScriviFileJollyAppend(NomeArchivio, cosascrivere)
next
'
Set objOutlook = Nothing
Set objNamespace = Nothing
Set objFolder = Nothing
'
End sub
' =====
Sub ScriviFileJollyAppend(pNomeArchivio, pcosascrivere)
dim fso, rifefile
Set fso=CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(pNomeArchivio)) Then
'msg = filespec & " esiste."
Set rifefile = fso.OpenTextFile(pNomeArchivio, 8)
Else
'msg = filespec & " Non esiste."
Set rifefile = fso.CreateTextFile(pNomeArchivio, TRUE)
End If
rifefile.WriteLine(pcosascrivere)
rifefile.Close
set rifefile = Nothing
End Sub
' ===
sub cancellazioneiniziale(vNomeArchivio)
dim CFSO
Set CFSO = CreateObject("Scripting.FileSystemObject")
If CFSO.FileExists(vNomeArchivio) = true Then
CFSO.DeleteFile(vNomeArchivio)
else
end if
end sub
'=========
' vbs - Microsoft Outlook Exchange 2000
' elenca tutte le cartelle pubbliche
'
'
Option Explicit
'
dim NomeArchivio, cosascrivere
NomeArchivio="C:\elenco-cartelle-exchange.txt" '
'
call cancellazioneiniziale(NomeArchivio)
'
call ElencaCartellePubbliche
' ===============
sub ElencaCartellePubbliche()
Dim objFolder, objNamespace, objOutlook
'
Const TipoCartella = 18 ' cartelle pubbliche ' 5 = Sent Items
'
Set objOutlook = CreateObject( "Outlook.Application" )
Set objNamespace = objOutlook.GetNamespace( "MAPI" )
'
objNamespace.Logon "Default Outlook Profile", , False, False
Set objFolder = objNamespace.GetDefaultFolder( TipoCartella )
'
Dim scartelle
'
for each scartelle in objFolder.folders
'msgbox scartelle.Name
cosascrivere = scartelle.Name
Call ScriviFileJollyAppend(NomeArchivio, cosascrivere)
next
'
Set objOutlook = Nothing
Set objNamespace = Nothing
Set objFolder = Nothing
'
End sub
' =====
Sub ScriviFileJollyAppend(pNomeArchivio, pcosascrivere)
dim fso, rifefile
Set fso=CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(pNomeArchivio)) Then
'msg = filespec & " esiste."
Set rifefile = fso.OpenTextFile(pNomeArchivio, 8)
Else
'msg = filespec & " Non esiste."
Set rifefile = fso.CreateTextFile(pNomeArchivio, TRUE)
End If
rifefile.WriteLine(pcosascrivere)
rifefile.Close
set rifefile = Nothing
End Sub
' ===
sub cancellazioneiniziale(vNomeArchivio)
dim CFSO
Set CFSO = CreateObject("Scripting.FileSystemObject")
If CFSO.FileExists(vNomeArchivio) = true Then
CFSO.DeleteFile(vNomeArchivio)
else
end if
end sub
'=========
Iscriviti a:
Post (Atom)