Ciao Eliano,
Cucchiaino (ciao) ha spiegato che l'uso della zona UsedRange possa
essere problematico. Per quanto riguarda il problema specifico indicato
da Cucchiaino, e' necessario sempre ricordarsi che la prima cella
dell'UsedRange possa non essere la prima cella del foglio, i.e. A1.
Pertanto si avrebbe potuto scrivere la tua macro in modo di superare il
problema di Cucchiaino:
'=============>>
Sub Ultima_Riga_Colonna2()
Dim R As Double
Dim C As Double
With ActiveSheet.UsedRange
R = .Row + .Rows.Count - 1 'ultima riga
C = .Column + .Columns.Count - 1 ' ultima colonna
End With
MsgBox "Ultima colonna = " _
& Columns(C).Address _
& " Ultima riga = " & R
End Sub
'<<=============
Post by cucchiainoI conteggi sulla zona UsedRange possono riservare
Come esempio, prova la seguente versione della macro:
'=============>>
Sub Ultima_Riga_Colonna3()
Dim R As Double
Dim C As Double
With Cells(Rows.Count, Columns.Count)
.Interior.ColorIndex = 3
.ClearContents
End With
With ActiveSheet.UsedRange
R = .Row + .Rows.Count - 1 'ultima riga
C = .Column + .Columns.Count - 1 ' ultima colonna
End With
MsgBox "Ultima colonna = " _
& Columns(C).Address _
& " Ultima riga = " & R
End Sub
'<<=============
In generale, la mia macro restituirebbe l'ultima cella popolata nella
colonna di interesse e l'ultima cella popolata nella riga stipulata; l'uso
della zona UsedRange potrebbe restituire l'ultima cella che sia stata
modificata - anche se la cella non è popolata ed anche se il contenuto
(o il formato) della cella fosse cancellato successivamente.
Detto questo, si dovrebbe notare che si possa aver dei problemi anche
con la mia macro: prova ad esempio:
'=============>>
Public Sub Tester()
Dim SH As Worksheet
Dim rng As Range
Dim iLastRow As Long
Dim iLastCol As Long
Set SH = ActiveSheet
With SH
.Cells.Clear
.Range("A1:K1000").Value = "Pippo"
.Columns("B:K").Hidden = True
.Rows("2:1000").Hidden = True
iLastRow = .Cells(Rows.Count, "A").End(xlUp).Row
iLastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
End With
MsgBox "L'ultima riga = " & iLastRow _
& vbNewLine _
& "L'ultima colonna = " & iLastCol
End Sub
'<<=============
Pertanto, se c'è la possibilità di dubbio, preferisco usare le seguenti
due funzioni:
'=============>>
Function LastRow(SH As Worksheet)
On Error Resume Next
LastRow = SH.Cells.Find(What:="*", _
After:=SH.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
'--------------->
Function LastCol(SH As Worksheet)
On Error Resume Next
LastCol = SH.Cells.Find(What:="*", _
After:=SH.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function
'<<=============
---
Regards,
Norman