ESEMPI VBA per EXCEL
 
 
In questa sezione si riportano degli esempi VBA per Excel. E' possibile copiare il codice VBA su una cartella Excel ed eseguire le macro.

Gli esempi sono rivolti a coloro che in parte hanno già acquisito i concetti base della programmazione VBA e degli oggetti di MS Excel. Per coloro che si affacciano al VBA per la prima volta si consiglia di scaricare la GUIDA VBA;

Il materiale di questo sito è interamente gratuito. Tutti i progetti sono stati realizzati dall'autore per uso personale. Si declina, pertanto, ogni responsabilità per danni hardware o software causati da un proprio o improprio uso di essi.

Procedura di creazione di una barra personalizzata

Esempi VBA

Alcuni esempi qui riportati sono stati presi dal sito www.vbaexpress.com

 

Piccole Macro Excel per iniziare con spiegazione passo passo

 

' METODI E PROPRIETA

' Membri: esistono due tipi

' Proprietà: membro che indica una caratteristica di un oggetto come , per esempio, NumberFormat

' Le proprietà sono seguite da =

' Metodi: membro che indica un'operazione da fare su un oggetto come per esempio Copy e ‘PasteSpecial

' I metodi possono non essere seguiti da niente (come per esempio Copy)

' oppure essere seguiti da argomenti che specificano la modalità in cui il metodo

' deve essere eseguito (per esempio PasteSpecial)

' Tali argomenti sono specificati preceduti da :=

 

' LA GUIDA

' il visulaizzatore oggetti comprende due tipi di schede

' a sinistra si hanno gli oggetti a destra i metodi e le proprietà relative agli oggetti selezionati

' con globali si intendono quegli oggetti "indipendenti", cioè che non devono essere riferiti

' a nessun oggetto. Infatti Activesheet, Range, ... non sono preceduti da nessun oggetto perchè

' hanno significato da soli. a destra si hanno le relative proprietà e moduli

' selezionando una di esse si vede in basso alla finestra una scritta tipo "Property ActiveCell As Range",

' ciò significa che la proprietà ActiveCell restituisce un oggetto che si comporta come l'oggetto Range

' selezionando a sinistra gli oggetti che non sono classi, anche per essi si può vedere i moduli e le proprietà relative

 

Sub ultimacella_selezionecorrente()

' seleziona l'ultima cella del foglio in cui è scritto qualcosa

' partendo dalla cella attiva

    ActiveCell.SpecialCells(xlLastCell).Select

   

' seleziona la prima cella dell'ultima riga in cui è scritto qualcosa

' solo per l'area corrente della cella selezionata

    Range("a2").Select

    ActiveCell.CurrentRegion.Select

    Selection.End(xlDown).Select

End Sub

 

 

Sub spostarsi_sotto_cellaattiva()

' spostarsi sotto di una cella quando questa è la cella attiva

ActiveCell.Offset(1, 0).Range("a1").Select

'oppure

ActiveCell.Range("a2").Select

 

' spostarsi sotto di una cella sotto un'area selezionata

End Sub

 

Sub Intervalli()

' definizione di un intervallo personale come caratteristiche e area

Dim MyRange As Range

Set MyRange = Range("c3:f8")

MyRange.Select

 

'oppure definizione di un intervallo assegnadogli un nome e un'area

End Sub

 

Sub spostarsi_sotto_un_intervallo()

' se viene definito un intervallo oppure esso già c'è come risultante di un'operazione

' di copia o incolla, di sotto si spiega come mettersi sulla cella/riga successiva

'definizione del mio range

Dim MyRange As Range

Set MyRange = Range("b4:h19")

' selezione dell'ultima cella dell'intervallo

MyRange.Cells(MyRange.Cells.Count).Select

' creazione di un nuovo intervallo uguale spostato in sotto di una riga

Dim MyNewRange As Range

Set MyNewRange = MyRange.Offset(1, 0)

MyNewRange.Select

' selezionamento dell'ultima riga del nuovo intervallo che coincide con la prima

' riga successiva al vecchio intervallo

MyNewRange.Rows(MyNewRange.Rows.Count).Select

' ora volendo si può selezionare la prima cella di tale riga

' che sta sotto all'intervallo vecchio

Selection.Range("A1").Select

 

'le ultime due operazioni sono riassumibili in una

MyNewRange.Rows(MyNewRange.Rows.Count).Range("A1").Select

 

' in alternativa si può ottenere lo stesso risultato senza creare un nuovo intervallo

MyRange.Rows(MyRange.Rows.Count).Select

Selection.Offset(1, 0).Range("a1").Select

' anch'essa scrivibile senza l'istruzione select in mezzo

MyRange.Rows(MyRange.Rows.Count).Offset(1, 0).Range("a1").Select

End Sub

 

Sub Scrivere_nelle_celle()

Selection.FormulaR1C1 = "----"

End Sub

 

Sub Copia_Incolla()

Selection.Copy

Range("c20:G20").PasteSpecial

Application.CutCopyMode = False

End Sub

 

Sub usare_il_with()

With Selection

    .Interior.ColorIndex = 8

    .WrapText = True

End With

End Sub

 

Sub invertire_una_proprietà()

s = Selection.Font.Strikethrough

Selection.Font.Strikethrough = Not s

End Sub

 

Sub uso_di_variabili()

' sostanzialmente ci sono due tipi di variabili: quelle che sono uguali al valore

' contenuto in una cella e quelle che sono uguali ad un determinato oggetto

' il primo tipo si scrive come sotto e assegna alla variabile il valore contenuto

' all'interno della cella

MyVar = Range("c5")

' il secondo tipo consente di chiamare una determinata proprietà col nome della variabile e

' la differenza sta nel fatto che si scrive set all'inizio

Set MyVar = Range("c3").Interior

' Aprendo la finestra variabili locali (Menu visualizza) è possibile (cliccando sui +) vedere le proprietà riferite

' alla variabile in corso

End Sub

 

Sub usare_IF()

'l'istruzione IF permette di eseguire un'operazione solo se una determinata condizione è verificata come nell'esempio

If ActiveCell.Column < 256 Then

    ActiveCell.Offset(0, 1).Select

End If

' Abbiamo creato un If che dice di spostarsi a destra se la cella attiva

' occupa una colonna inferiore a 256

' nota che l'istruzione If può essere usata di solito solo se la risposta

' è del tipo SI o NO. Nota anche che finisce sempre con l'istruzione End If

 

' Ora gli diciamo cosa fare se la condizione invece non è verificata con ELSE

' nello specifico gli diciamo di selezionare la cella della riga sotto nella prima colonna

If ActiveCell.Column < 256 Then

    ActiveCell.Offset(0, 1).Select

Else

    Cells(ActiveCell.Row + 1, 1).Select

    End If

End Sub

 

Sub IF_con_variabili()

' Usare If con il valore di una variabile

' se nel box non viene immesso niente

' la macro non va avanti

Dim myDate As String

myDate = Inputbox("Inserisci data")

If myDate <> "" Then

    If IsDate(myDate) Then

    Range("b3").FormulaR1C1 = myDate

    Else

    Range("b3").FormulaR1C1 = "ri-immetti data"

    End If

End If

End Sub

 

Sub For_Each()

' Questa macro dà l'impostazione per eseguire un ciclo per ogni oggetto

' In particolare qui si chiede di proteggere ciascun foglio della libreria

Dim mysheet As Worksheet ' dimensiono la mia variabile come un foglio

Set mysheet = Worksheets(1) ' assegno per ora il valore di mySheet uguale al foglio 1

mysheet.Select

mysheet.Protect "puffo" 'ho protetto solo il foglio 1

 

' ora creo un ciclo per tutti i fogli

Dim mySheets As Worksheet

For Each mySheets In Worksheets

    mySheets.Select

    mySheets.Protect "puffo"

Next mySheets

'esercizio

Dim foglio As Worksheet

For Each foglio In Worksheets

    foglio.Unprotect "puffo"

Next foglio

End Sub

 

Sub For_to()

' E' uguale all'istruzione For_Each, con

' la differenza che qui ci fermiamo quando lo vogliamo

' noi e non li facciamo tutti (Each)

Dim mysheet As Worksheet

Dim i As Integer 'creo una variabile contatore che è un numero naturale

For i = 1 To Worksheets.Count 'per i che va da 1 all'ultimo

    Set mysheet = Worksheets(i)

    mysheet.Protect "puffo"

Next i

End Sub

 

Sub messaggi()

' messaggio con due opzioni si no

' creo una variabile uguale alla rispota che verrà data

MSGBOX "Questo è un messaggio con due opzioni", vbYesNo

Dim VarRisposta As VbMsgBoxResult

If VarRisposta = vbNo Then

    MSGBOX "Hai risposto NO", vbOKOnly

    Else

    MSGBOX "Hai risposto sì", , "TITOLO MIO"

End If

End Sub

 

Sub UsoInputbox()

Application.Inputbox ("prova messaggio")

End Sub

 

Sub Inputbox_con_variabile()

Dim MyVar As String

MyVar = Inputbox("prova messaggio con variabile")

End Sub

 

Sub Do_Loop()

'La funzione do loop permette di eseguire un ciclo di istruzioni

'fin tanto che l'istruzione specificata da Do si verifica essere vera

    counter = 0 'definisce una variablie contatore che al momento è uguale a zero

    myNum = 20 ' definisce una variabile di valore pari a venti

    Do While myNum > 10 'è come se si dicesse al computer"inizia il ciclo e

    'e continualo fin tanto che la variabile myNum è maggiore di 10, quando

    ' non lo sarà più salta a Loop, cioè termina il ciclo

        myNum = myNum - 1

        counter = counter + 1

    Loop

End Sub

 

Sub Dir_OpenFile()

'Questa sub contine due istruzioni:

' la prima è la funzione Dir che serve per immagazzinare il nome di un file

Dim MyPath As String

MyPath = "C:\"

'in questo modo ho definito una variabile che mi dice da dove pescare i miei file

'ora posso dirgli di recepire il nome del file andandolo a pescare dalla cartella che

' gli ho specificato con myPath e gli dico che sto cercando dei file con l'attributo vbNormal

Dim myFileName As String

myFileName = Dir(MyPath, vbNormal)

'ora gli posso dire di aprire il file

Workbooks.Open Filename:=MyPath & myFileName

'e ora di chiuderlo senza salvare

ActiveWorkbook.Close (False)

' il problema è che così apro solo il primo file che il computer

' trova nella cartella che io gli ho indicato

' posso creare un ciclo che gli dice di fare sempre questa operazione di individuazione apertura chiusura

' di tutti i file della cartella

MyPath = "C:\"

myFileName = Dir(MyPath, vbNormal)

Do While myFileName <> ""

    Workbooks.Open Filename:=MyPath & myFileName

    ActiveWorkbook.Close (False)

    myFileName = Dir 'riga che gli dice di andare avanti al successivo

    'Dir restituisce il primo nome di file che corrisponde a quello specificato in nomepercorso. Per ottenere i successivi

    'nomi di file corrispondenti a nomepercorso, chiamare di nuovo la funzione Dir senza alcun

    'argomento. Se non vengono trovati altri nomi di file corrispondenti, Dir restituirà

    'una stringa di lunghezza zero, dopodiché sarà necessario utilizzare di nuovo nomepercorso nelle successive chiamate,

    'altrimenti verrà generato un errore. È possibile passare a un nuovo nomepercorso senza trovare tutti i nomi di file che

    'corrispondono al nomepercorso corrente. Non è possibile tuttavia chiamare la funzione Dir in modo ricorsivo. Richiamando Dir con

    'l'attributo vbDirectory non verranno restituite sottodirectory in modo continuo.

    'Suggerimento   Dato che i nomi di file vengono individuati senza rispettare un ordine particolare, potrebbe essere utile salvarli

    'in una matrice e quindi ordinarla.

    Loop

End Sub

 

Sub CancellaContenuto()

'questa macro cancella ciò che è scritto nella cella

Range("a1:b3").ClearContents

End Sub

 

Sub ultimacella_selezionecorrente()

'

 

' seleziona l'ultima cella del foglio in cui è scritto qualcosa

' partendo dalla cella attiva

    Dim MyRange As Range

    Set MyRange = Range("i8").SpecialCells(xlLastCell)

   

' seleziona la prima cella dell'ultima riga in cui è scritto qualcosa

' solo per l'area corrente della cella selezionata

    Range("a2").Select

    ActiveCell.CurrentRegion.Select

    Selection.End(xlDown).Select

End Sub

 

Sub var_ultimacella()

'

'

Dim myr As Range

Set myr = Range("a1").CurrentRegion

Dim LC As Range

Set LC = myr.Cells(myr.Cells.Count)

Range("d1:e1").AutoFill Destination:=myr.Range("d1", LC)

 

End Sub

 

Sub Corri_altre_macro()

'

    Application.Run "Cartel1.xls!NomeMacro"

 

End Sub

 

Sub selezione_intervallo_pieno()

'

 Sheets("Foglio2").Activate

Range("d4").Activate

    Dim Inter As Range

    Set Inter = Range(ActiveCell.End(xlToRight), ActiveCell.End(xlDown))

    Inter.Copy

    Sheets("Foglio1").Activate

    Range("G10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Application.CutCopyMode = False

End Sub

 

Sub Cancella_righe()

'

    Rows("20:33").Delete Shift:=xlUp

 

End Sub

 

Sub sommadicolonna_e_address()

Dim Ranget As Range

Set Ranget = Range("b4:h19")

Dim MyTot As Range

Set MyTot = Ranget.Offset(Ranget.Rows.Count).Rows(1)

MyTot.Cells(1) = Ranget.Columns(1).Address

'MyTot.Cells(1) = Ranget.Columns(1).Address(False, False)

MyTot.Formula = "=SUM(" & Ranget.Columns(1).Address(False, False) & ")"

With MyTot.Font

    .FontStyle = "Grassetto Corsivo"

    End With

End Sub

 

Sub grassetto_corsivo()

'

    With Selection.Font

        .Name = "Arial"

        .FontStyle = "Grassetto Corsivo"

        .Size = 10

        .Strikethrough = False

        .Superscript = False

        .Subscript = False

        .OutlineFont = False

        .Shadow = False

        .Underline = xlUnderlineStyleNone

        .ColorIndex = xlAutomatic

    End With

End Sub

 

Sub Attendi()

Dim PauseTime, Start, Finish, TotalTime

If (MSGBOX("Scegliere Sì per interrompere l'applicazione per 5 secondi", 4)) = vbYes Then

    PauseTime = 5    ' Imposta la durata.

    Start = Timer    ' Imposta l'ora di inizio.

    Do While Timer < Start + PauseTime

        DoEvents        ' Passa il controllo ad altri processi.

    Loop

    Finish = Timer    ' Imposta l'ora di fine della pausa.

    TotalTime = Finish - Start    ' Calcola il tempo totale.

    MSGBOX "Interruzione di " & TotalTime & " secondi"

Else

    End

End If

End Sub

 

Sub GestioneErrore()

'per gestire un errore gli si può dire

'di saltare, nel caso si verifichi l'errore

'alla riga successiva oppure mandarlo

'ad un'etichetta o una riga

'gli genero un errore dicendo di selezionare il folgio1000!

 

'primo metodo

On Error Resume Next

Worksheets(1000).Activate

MSGBOX "Errore saltato"

 

'secondo metodo

Worksheets(1000).Activate

On Error GoTo oltreErrore

Worksheets(15).Activate

 

oltreErrore:

MSGBOX "Errore saltato anche in questo caso"

End Sub

 

Proteggi simultaneamente tutti i fogli

 

Sub Proteggi_tutti_fogli()

Dim Sheet As Worksheet

Application.ScreenUpdating = False

For Each Sheet In Worksheets

Sheet.Protect ("xxx")

Next Sheet

End Sub

 

Sub Sproteggi_tutti_fogli()

Application.ScreenUpdating = False

Dim Sheet As Worksheet

For Each Sheet In Worksheets

Sheet.Unprotect ("xxx")

Next Sheet

End Sub

 

Funzione per saltare le celle vuote nella definizione di un intervallo

 

Function CoolRange(MyRange As Range, Optional NoNumbers As Boolean, Optional NoTexts As Boolean) As Range

 

    Dim RgConstants As Range, RgFormulas As Range

    Dim MyOption As Integer 'string to consider optional values

       

    If NoNumbers = False Then MyOption = 1

    If NoTexts = False Then MyOption = MyOption + 2

       

        MyOption = MyOption + 20

 

    On Error Resume Next

    Set RgConstants = MyRange.SpecialCells(xlCellTypeConstants, MyOption)

    Set RgFormulas = MyRange.SpecialCells(xlCellTypeFormulas, MyOption)

   

    On Error GoTo 0

    Select Case True

        Case RgConstants Is Nothing And RgFormulas Is Nothing: Exit Function

        Case RgConstants Is Nothing: Set CoolRange = RgFormulas

        Case RgFormulas Is Nothing: Set CoolRange = RgConstants

        Case Else: Set CoolRange = Union(RgConstants, RgFormulas)

    End Select

 

    Set RgConstants = Nothing

    Set RgFormulas = Nothing

End Function

 

BrowseForFolder per cercare una cartella con VBA in Excel

 

Function GetFolderPath() As String

    Dim oShell As Object

    Set oShell = CreateObject("Shell.Application"). _

    BrowseForFolder(0, "Please select folder", 0, "c:\\")

    If Not oShell Is Nothing Then

        GetFolderPath = oShell.Items.Item.Path

    Else

        GetFolderPath = vbNullString

    End If

    Set oShell = Nothing

End Function

 

Macro per cambiare con VBA l’icona di Excel

 

Option Explicit

 

Declare Function GetActiveWindow32 Lib "USER32" Alias _

                                   "GetActiveWindow" () As Integer

 

Declare Function SendMessage32 Lib "USER32" Alias _

                               "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _

                                               ByVal wParam As Long, ByVal lParam As Long) As Long

 

Declare Function ExtractIcon32 Lib "SHELL32.DLL" Alias _

                               "ExtractIconA" (ByVal hInst As Long, _

                                               ByVal lpszExeFileName As String, _

                                               ByVal nIconIndex As Long) As Long

                                              

'modification of code from Excel Experts E-Letter Archives.

'Original code By Jim Rech can be found by following this

'link > http://www.j-walk.com/ss/excel/eee/eee020.txt

 

Sub ChangeApplicationIcon()

 

      Dim Icon&

     

      '*****Change Icon To Suit*******

      Const NewIcon$ = "notepad.exe"

      '*****************************

     

      Icon = ExtractIcon32(0, NewIcon, 0)

      SendMessage32 GetActiveWindow32(), &H80, 1, Icon      '< 1 = big Icon

      SendMessage32 GetActiveWindow32(), &H80, 0, Icon      '< 0 = small Icon

 

End Sub

 

Connessione da Excel ad un database access con vba

 

Option Explicit

 

‘Aggiungere i riferimenti alle librerie DAO e Office

 

Public gdbCurrentDB As Database

Public objRecordset As Recordset

Public objTableDefs As TableDef

Public tname As String 'nome della tabella

Public counter As Long

 

Sub DbConnect()

'connessione veloce ad un database

On Error GoTo herr

 Set gdbCurrentDB = OpenDatabase("C:\....miodatabase.mdb", True)

 Exit Sub

herr:

 Set gdbCurrentDB = Nothing

End Sub

 

 

Sub GetData()

'Connessione veloce ad una tabella o query

'tname è il nome della tabella

 

Dim k, j, l As Long

Dim n As Variant

On Error GoTo err01

Set objRecordset = gdbCurrentDB.OpenRecordset(tname)

Exit Sub

err01:

MsgBox "impossibile recuperare i dati richiesti."

End Sub

 

Public Sub GetTableList(rctl As Control)

  'recupera tutte le tabelle

'rctl è un controllo tipo listbox

 

On Error GoTo FTLErr

  Dim i As Integer

  Dim sTmp As String

  For i = 0 To gdbCurrentDB.TableDefs.Count - 1

    sTmp = gdbCurrentDB.TableDefs(i).Name

        If (gdbCurrentDB.TableDefs(StripConnect(sTmp)).Attributes And dbSystemObject) = 0 Then

    sTmp = gdbCurrentDB.TableDefs(i).Name

    rctl.AddItem sTmp

        End If

  Next

 

'se vuoi recuperare anche le queries

'  For i = 0 To gdbCurrentDB.QueryDefs.Count - 1

'    sTmp = gdbCurrentDB.QueryDefs(i).Name

'    rctl.AddItem sTmp

'    Next

  Exit Sub

FTLErr:

  Exit Sub

End Sub

 

Private Function StripConnect(rsTblName As String) As String

  If InStr(rsTblName, "->") > 0 Then

    StripConnect = Left(rsTblName, InStr(rsTblName, "->") - 2)

  Else

    StripConnect = rsTblName

  End If

End Function

 

Criteri multipli per CONTA.SE e SOMMA.SE

 

Conteggio dei valori nell’intervallo c4:c11 solo se maggiori di zero e minori del valore indicato nella cella F13

=CONTA.SE($C$4:$C$11;"<=" & F13) - CONTA.SE($C$4:$C$11;"<=0")

 

Controlla l’assistente di Office con VBA Excel

 

Sub OfficeAssistant()

    With Assistant

        .Visible = True

        With .NewBalloon

            .Heading = "Come ti aiuto?"

            .Labels(1).Text = "Sono stanco"

            .Labels(2).Text = "Ho troppi compiti"

            .Labels(3).Text = "Voglio giocare"

            .BalloonType = msoBalloonTypeButtons

            .Button = msoButtonSetNone

            .Mode = msoModeModeless

            .Callback = "Response"

            .Show

        End With

    End With

 

End Sub

 

Sub Response(bln As Balloon, lbtn As Long, lPriv As Long)

    bln.Close

    Select Case lbtn

        Case Is = 1

            MsgBox "Riposati", vbInformation

        Case Is = 2

            MsgBox "Che aspetti. Inizia", vbCritical

        Case Is = 3

            MsgBox "Chiama tre amici e tira fuori il risiko", vbInformation

    End Select

End Sub

 

Copia una cartella e tutto il suo contenuto

 

Sub FSO_Copy_Folders_New_Location()

 

‘se necessario aggiungere il riferimento alla libreria Microsoft Scripting Runtime

   Dim fsoObj As Scripting.FileSystemObject

   Const stSourceFolder As String = "c:\Test\excel"

  

   Const stTargetFolder As String = "\\Destination"

  Set fsoObj = New Scripting.FileSystemObject

 

   With fsoObj

            If .FolderExists(stTargetFolder) Then

         .DeleteFolder (stTargetFolder)

      End If

            .CopyFolder Source:=stSourceFolder, Destination:=stTargetFolder, OverWriteFiles:=True

   End With

 

   MsgBox "La cartella" & stSourceFolder & _

                " è stata copiata in" & stTargetFolder & ".", vbInformation

   Set fsoObj = Nothing

End Sub

 

Sposta Cartella e tutto il suo contenuto

 

Sub FSO_Move_Folders_New_Location()

   Dim fsoObj As Scripting.FileSystemObject

   Const stSourceFolder As String = "c:\Test\excel"

   Const stTargetFolder As String = "C:\Destination2"

 

   Set fsoObj = New Scripting.FileSystemObject

 

   With fsoObj

      If .FolderExists(stTargetFolder) Then

         .DeleteFolder (stTargetFolder)

      End If

 

      .CopyFolder Source:=stSourceFolder, Destination:=stTargetFolder, OverWriteFiles:=True

     .DeleteFolder (stSourceFolder)

   End With

 

   MsgBox "La cartella" & stSourceFolder & _

                " spostata in" & stTargetFolder & ".", vbInformation

   Set fsoObj = Nothing

End Sub

 

Creare via codice un riferimento ad una libreria

 

Sub Add_External_Reference_()

   Dim rVBReference As VBIDE.Reference

   Dim wbBook As Workbook

   'GUID Microsoft Scripting Runtime.

 

   Const stGuid As String = "{420B2830-E718-11CF-893D-00A0C9054228}"

 

   Const stName As String = "MS Scripting Runtime"

 

   Set wbBook = ThisWorkbook

   On Error GoTo Error_Handling

   With wbBook

      For Each rVBReference In .VBProject.References

 

         If rVBReference.GUID = stGuid Then

            MsgBox "La libreria di " & stName & " è già attiva!", vbInformation

            GoTo ExitHere

         End If

 

      Next rVBReference

            .VBProject.References.AddFromGuid stGuid, 1, 0

      MsgBox "La reference " & stName & " è stata creata!", vbInformation

      GoTo ExitHere

   End With

 

ExitHere:

   Set rVBReference = Nothing

 

   Exit Sub

Error_Handling:

 

   MsgBox "Impossibile creare la reference  " & stName & vbCrLf & " poiché non esiste su questo PC.", vbCritical

 

   Resume ExitHere

End Sub

 

Eliminare un riferimento ad una libreria via codice

 

Sub Delete_Reference()

   Dim wbBook As Workbook

 

   Const stDescription As String = "Scripting"

 

   Set wbBook = ThisWorkbook

   On Error GoTo Error_Handling

   With wbBook.VBProject.References

      .Remove .Item(stDescription)

   End With

 

    MsgBox "Reference rimossa!", vbInformation

 

ExitHere:

 

   Exit Sub

Error_Handling:

   MsgBox "Reference non esistente!", vbInformation

   Resume ExitHere

 

End Sub

 

Macro per eliminare una cartella non vuota

Sub RemoveDir_WithFiles()

Creare reference a Microsoft scripting runtime library

 

Dim objFSO As Object

 

On Error GoTo DelErr

'// Attenzione: Verrà cancellata la cartella Mydir senza avvisi

Set objFSO = CreateObject("Scripting.FileSystemObject")

objFSO.DeleteFolder "C:\Mydir", True

 

XitProperly:

Set objFSO = Nothing

 

Exit Sub

DelErr:

MsgBox "Errore:=" & Err.Number & vbCr & Err.Description

Resume XitProperly

End Sub

 

Trova l’ultima riga o cella non vuota

 

Function xlLastRow(Optional WorksheetName As String) As Long

    If WorksheetName = vbNullString Then WorksheetName = ActiveSheet.Name

    With Worksheets(WorksheetName)

        On Error Resume Next

        xlLastRow = .Cells.Find("*", .Cells(1), xlFormulas, _

        xlWhole, xlByRows, xlPrevious).Row

        If Err <> 0 Then xlLastRow = 0

    End With   

End Function

 

Mostra tutte le icone (faceId) dei bottoni delle barre di Excel

 

Sub listAllFaces()

‘codice originale wrox

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim cbCtl As CommandBarControl

Dim cbBar As CommandBar

 

On Error GoTo Recover

Application.ScreenUpdating = False

 

Set cbBar = CommandBars.Add(Position:=msoBarFloating, MenuBar:=False, temporary:=True)

Set cbCtl = cbBar.Controls.Add(Type:=msoControlButton, temporary:=True)

 

k = 1

Do

    For j = 1 To 15

    i = i + 1

    Application.StatusBar = "Face ID=" & i

    cbCtl.FaceId = i

    cbCtl.CopyFace

    ActiveSheet.Paste Cells(k, j + 1)

    Cells(k, j).Value = i

    Next j

    k = k + 1

Loop

 

Recover:

If Err.Number = 1004 Then Resume Next

Application.StatusBar = False

cbBar.Delete

End Sub

 

Recupera che tipo di oggetto è selezionato

 

Sub System_TypeOfSelection()

MsgBox "E’ selezionato un: " & TypeName(Selection) & ".", vbInformation

End Sub

 

Funzione per verificare se una cartella esiste

 

Function ChkFileExists(strFileName As String) As Boolean

If Dir(strFileName) <> "" Then

ChkFileExists = True

Else

ChkFileExists = False

End If

End Function

 

Tutte le informazioni di sistema tramite VBA

 

Sub OperatingSystem()

Debug.Print "------------------------------------------------------------"

Debug.Print Application.OperatingSystem

Debug.Print Application.Name

Debug.Print Application.LibraryPath

Debug.Print Application.MemoryTotal

Debug.Print Application.MemoryUsed

Debug.Print Application.MemoryFree

Debug.Print Application.StartupPath

Debug.Print Application.UILanguage

Debug.Print Application.UsableHeight

Debug.Print Application.UsableWidth

Debug.Print Application.WindowsForPens

Debug.Print Application.Version

Debug.Print Application.Build

Debug.Print Application.OrganizationName

Debug.Print Application.UserName

Debug.Print "xlCountrycode : " & Application.International(xlCountryCode)

Debug.Print "xlCountrySetting : " & Application.International(xlCountrySetting)

Debug.Print "xlNonEnglishFunctions : " & Application.International(xlNonEnglishFunctions)

Debug.Print "xlMetric : " & Application.International(xlMetric)

Debug.Print "xlCountrySetting : " & Application.International(xlCountrySetting)

Debug.Print "------------------------------------------------------------"

End Sub

 

Scrivere e utilizzare il registro di Windows con vba

 

Sub SalvaSettings()

 

'In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata per creare

'voci nel registro di Windows o nel file ini in piattaforme Windows a 16 bit per

'l 'applicazione MyApp. L'istruzione DeleteSetting viene quindi utilizzata per eliminarle

 

' Inserisce alcune impostazioni nel registro.

SaveSetting appname:="MyApp", Section:="Startup", _

            Key:="Top", setting:=75

SaveSetting "MyApp", "Startup", "Left", 50

' Rimuove la sezione e tutte le impostazioni dal

' registro.

DeleteSetting "MyApp", "Startup"

End Sub

 

Sub GetTuttiSettingdiUnAppl()

'In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata

'per creare voci nel registro di Windows per l'applicazione specificata

'dall'argomento appname. La funzione GetAllSettings viene quindi utilizzata

'per visualizzare le impostazioni. Si noti che non è possibile utilizzare la

'funzione GetAllSettings per recuperare i nomi di applicazione e i nomi di sezione.

'L'istruzione DeleteSetting viene infine utilizzata per eliminare le voci relative

'all'applicazione.

 

' Variabile Variant per archiviare la matrice bidimensionale

' restituita da GetAllSettings.

' Valore Integer per memorizzare il contatore.

Dim MySettings As Variant, intSettings As Integer

' Inserisce alcune impostazioni nel registro.

SaveSetting appname:="MyApp", Section:="Startup", _

Key:="Top", setting:=75

SaveSetting "MyApp", "Startup", "Left", 50

' Legge le impostazioni.

MySettings = GetAllSettings(appname:="MyApp", Section:="Startup")

    For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

        Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

    Next intSettings

DeleteSetting "MyApp", "Startup"

End Sub

 

Autodistruggi un file aperto

 

Sub KillMe()

    With ThisWorkbook

        .Saved = True

        .ChangeFileAccess Mode:=xlReadOnly

        Kill .FullName

        .Close False

    End With

End Sub

 

HOME                DOWNLOADS UTILITIES                I MIGLIORI SITI VBA EXCEL                I MIGLIORI SITI EXCEL

 

Contacts: mailto:abcba_vba@virgilio.it

(c) ALe 2005 - All Rights Reserved