Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Matteo,
Oltre all'ottimo consiglio di Francesca_F, ossia:
Per questa richiesta, relativa alla creazione di una macro su Excel, ti invito ad aprire una richiesta sul nostro forum gemello MSDN. Si tratta di una Community di sviluppatori, che saranno entusiasti di assisterti!
credo che ci siano numerosi esperti qui che possono aiutarti con qualunque problema relativo ad Excel.
Per quanto riguarda la tua specifica domanda, vorrei proporre una modifica, molto leggera, del codice che io ebbi suggerito l'anno scorso a Lblu:
- Inserisci un nuovo foglio
- Nella cella A1 del nuovo foglio, immetti la formula
=SUBTOTALE(3;FiltroAutomatico)
- Fai clic dx sulla linguetta del nuovo foglio
- Seleziona l'opzione Visualizza Codice dal menu contestuale risultante
- Incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub Worksheet_Activate()
Me.Visible = xlSheetVeryHidden
End Sub
'--------->>
Private Sub Worksheet_Calculate()
Call NascondeColonneVuote
End Sub
'<<=========
- Fai clic dx sulla linguetta del foglio del filtro automatico
- Seleziona l'opzione Visualizza Codicedal menu contestuale risultante
- Incolla il seguente codice:
'=========>>
Public Sub CancellaFiltri()
With ActiveSheet
If .FilterMode Then
.AutoFilter.ShowAllData
End If
End With
End Sub
'<<=========
'--------->>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oName As Name
If Me.AutoFilterMode Then
Set RngAutoFilter = Me.AutoFilter.Range
Set oName = ThisWorkbook.Names.Add( _
Name:="FiltroAutomatico", _
RefersTo:=RngAutoFilter)
End If
End Sub
'<<=========
- Alt+IM per inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
Public RngAutoFilter As Range
Public Const sFoglioAutoFilter As String = "Foglio1" '<<=== Modifica
'--------->>
Public Sub NascondeColonneVuote()
Dim WB As Workbook
Dim SH As Worksheet
Dim RngAutoFilter As Range, RngDati As Range, rngVisible As Range
Dim rCell As Range, rCol As Range
Dim bHidden As Boolean
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglioAutoFilter)
Set RngAutoFilter = SH.AutoFilter.Range
If Not RngAutoFilter Is Nothing Then
On Error GoTo XIT
Application.ScreenUpdating = False
With RngAutoFilter
Set RngDati = .Offset(1, 1).Resize(.Rows.Count - 1, _
.Columns.Count - 1)
.EntireColumn.Hidden = False
End With
On Error Resume Next
RngAutoFilter.EntireColumn.Hidden = False
Set rngVisible = RngDati.SpecialCells(xlCellTypeVisible)
For Each rCol In RngDati.Columns
For Each rCell In rCol.Cells
With rCell
If .EntireRow.Hidden = False Then
bHidden = .Value = vbNullString
If Not bHidden Then Exit For
End If
End With
Next rCell
rCol.EntireColumn.Hidden = bHidden
Next rCol
End If
XIT:
Application.ScreenUpdating = True
End Sub
'--------->>
Public Sub VisualizzaColonne()
Dim Rng As Range
Set Rng = ActiveSheet.AutoFilter.Range
If Not Rng Is Nothing Then
Rng.EntireColumn.Hidden = False
End If
End Sub
'--------->>
Public Sub CancellaFiltri()
With ActiveSheet
If .FilterMode Then
.AutoFilter.ShowAllData
End If
End With
End Sub
'<<=========
- Ctrl+R per accedere alla finestra Project Explorer ('Gestione progetti')
- Fai doppio clic sul modulo ThisWorkbook (Questa_cartella_di_Lavoro) del file e incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub Workbook_Open()
Dim SH As Worksheet
Dim oName As Name
Set SH = Me.Sheets(sFoglioAutoFilter)
With SH
If .AutoFilterMode Then
Set RngAutoFilter = .AutoFilter.Range
Set oName = ThisWorkbook.Names.Add( _
Name:="FiltroAutomatico", _
RefersTo:=RngAutoFilter)
End If
End With
End Sub
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
Potresti scaricare il mio file di prova Matteo20180618.xlsm
===
Regards,
Norman