Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Scusami, per cercare di fare meglio ho fatto peggio! Il pulsante ConControllo non esiste, lo ho inserito per mostrarti la differenza fra la macro con il controllo e quella senza.
A scanso di equivoci ti ho ri-postato l'esempio come deve essere, spiegando anche come funziona http://cid-e14e39f69c1c7d59.office.live.com/self.aspx/.Public/FiltroCombo.xls
Solo ApplicaFiltro crea il foglio ma avrei bisogno di tutti e due i controlli :
1)se Foglio gia presente (allora Esci dalla funzione!)
2)se Non ci sono righe per l'Autore selezionato nel foglio "Sequenza" (allora Avvisami, Elimina il foglio che mi hai generato, Esci dalla funzione!)
il primo 1) E' intercettato e gestito e funziona a puntino.
Il secondo 2) mi genera il problema che segue:
Prova a selezionare "Zucchero" come autore, e fai partire la macro ConControllo. "Zucchero" non è presente nella lista, quindi dovrebbe eliminare il foglio! Invece mi da "foglio gia presente". Poi chiudi la User elimina il foglio che si è generato, riapri la User, seleziona "Zucchero" come autore, e fai partire la macro ConControllo, mi da "Processo fallito, verrà eliminato il foglio creato". Riprova piu volte e vedi che fa sempre prima uno e poi l'altro errore !
Riprova questo:
Private Sub ConControllo_Click()
Dim lng As Long
Dim rng As Range
Dim lRiga As Long
Application.ScreenUpdating = False
ThisWorkbook.Worksheets.Add
On Error Resume Next
ActiveSheet.Name = Me.ComboBox1.Value & "_" & _
Format(Date, "dd") & "_" & _
Format(Date, "mm") & "_" & _
Format(Year(Date), "yy")
If Err.Number = 1004 Then
Application.DisplayAlerts = False
MsgBox "Processo fallito, verrà eliminato il foglio creato"
ActiveSheet.Delete
Application.DisplayAlerts = True
Exit Sub
End If
On Error GoTo 0
On Error GoTo RigaErrore
With shAutori
For lng = 2 To lRigaAut
If .Range("A" & lng).Value = _
Me.ComboBox1.Value Then
.Range("A" & lng & ":G" & lng).Copy _
Destination:=ActiveSheet.Range("A1")
End If
Next
End With
With shOperatore
For lng = 2 To lRigaAut
If .Range("A" & lng).Value = _
Me.ComboBox2.Value Then
.Range("A" & lng & ":G" & lng).Copy _
Destination:=ActiveSheet.Range("A2")
End If
Next
End With
With shSequenza
lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("A1").AutoFilter Field:=2, Criteria1:= _
Me.ComboBox1.Value
If .Range("A2:A" & lRiga).SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Destination:=ActiveSheet.Range("A9")
Else
Application.DisplayAlerts = False
MsgBox "Processo fallito, verrà eliminato il foglio creato"
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
End With
RigaChiusura:
Application.ScreenUpdating = True
shSequenza.Range("A1").AutoFilter
Exit Sub
RigaErrore:
If Err.Number = 1004 Then
Application.DisplayAlerts = False
MsgBox "Processo fallito, verrà eliminato il foglio creato"
ActiveSheet.Delete
Application.DisplayAlerts = True
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Fai sapere, grazie.
--
La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.
--
Mauro Gamberini - Microsoft© MVP(Excel)