Un altra versione della stessa routine.
Rispetto alla versione precedente, in questo caso viene utilizzata una stringa come parametro che servirà per impostare un Array che conterrà tutte le stringhe chiavi da ricercare al fine di eliminare le righe trovate nel foglio excel
Come Passare i Parametri alla Sub: strFullPathAndFileExcel
- strFullPathAndFileExcel >> inserire la stringa che rappresenta la Path e il nome del File Excel
- strSheet >> inserire la stringa con il nome del Foglio di Lavoro
- strArrayFind >> inserire in questa stringa uno o più valori da ricercare separati dalla Virgola
- LookAtModal >> scegliere il tipo di corrispondenza per la ricerca da effettuare: xlWhole = Esatta oppure xlPart = che contiene in Parte
Vengono ricercati i valori presenti in strArrayFind in una qualsiasi riga e colonna del foglio excel e verrà cancellata la riga corrispondente
- il parametro strArrayFind di questo esempio contiene "Titolo,Totali,SubTotali"
- verranno cancellate tutte le righe che contengono, in una cella qualsiasi, il valore Titolo
- verranno cancellate tutte le righe che contengono, in una cella qualsiasi, il valore Totali
- verranno cancellate tutte le righe che contengono, in una cella qualsiasi, il valore SubTotali
- es… se esistono più righe che in una qualsiasi cella/colonna contengono la parola chiave “Totali”, tutte le rispettive righe verranno eliminate dal foglio di excel.
La Sub risulta molto flessibile per qualsiasi scopo in quanto non è stato impostato nessun valore fisso a nessuna variabile.
Si può passare uno o più elementi da ricerca per i quali eliminare l'intera riga nel foglio excel;
- es. se in strArrayFind si imposta il valore “Pippo” >>> MyDeleteRowsEXcel "C:\FileExcel.xlsx", "Foglio1", “Pippo”, tale valore verrà ricercato in tutte le righe e colonne del Foglio1 e verranno eliminate tutte le righe che soddisfano la ricerca.
Si può impostare il tipo di ricerca da eseguire con il metodo FInd: corrispondenza Esatta oppure in Parte
Implementare il codice con eventuali controlli, validazioni, messaggi, etc…
N.B. Controllare, validare e verificare prima dell'uso
' Set search parameter type
Enum xlFindModal
xlWhole = 1
xlPart = 2
End Enum
' example of calling the Sub
MyDeleteRowsEXcel "C:\FileExcel.xlsx", "Foglio1", "Titolo,Totali,SubTotali, xlWhole"
' DELETE ROWS EXCEL FILE
Sub MyDeleteRowsEXcel(strFullPathAndFileExcel As String, strSheet As String, strArrayFind As String, LookAtModal As xlFindModal)
Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim rngRow As Range
Dim strFirst As String
Dim aryStrSearch() As String
' Set Array with the values to be searched for
aryStrSearch = Split(strArrayFind, ",")
' open Excel file and sheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(strFullPathAndFileExcel)
Set xlSheet = xlBook.Worksheets(strSheet)
' whit sheet used range
With xlSheet.UsedRange
' Search all strings to delete rows
Dim iX As Integer
For iX = 0 To UBound(aryStrSearch)
' delete row for
Set rngRow = .Find(aryStrSearch(iX), LookIn:=xlValues, LookAt:=IIf(LookAtModal = 1, xlWhole, xlPart))
If Not rngRow Is Nothing Then
' save the first occurrence to ensure exit from the loop
strFirst = rngRow.Address
' search for all occurrences
Do
' delete row
rngRow.EntireRow.Delete
' search next
Set rngRow = .FindNext()
' if there are no other elements exit the loop
If rngRow Is Nothing Then Exit Do
Loop While rngRow.Address <> strFirst
End If
Next iX
End With
' close
xlBook.Close SaveChanges:=True
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Set rngRow = Nothing
End Sub