Ho un foglio di lavoro Excel con un pulsante.Ottenere l'usato usato
Quando chiamo la funzione usedRange(), l'intervallo restituito include la parte del pulsante.
Esiste comunque l'intervallo utilizzato che contiene i dati?
Ho un foglio di lavoro Excel con un pulsante.Ottenere l'usato usato
Quando chiamo la funzione usedRange(), l'intervallo restituito include la parte del pulsante.
Esiste comunque l'intervallo utilizzato che contiene i dati?
Che tipo di pulsante, né un controllo Forms né un controllo ActiveX devono influire sull'intervallo utilizzato.
È un problema noto che excel non tiene traccia del range utilizzato molto bene. Qualsiasi riferimento all'intervallo utilizzato tramite VBA reimposterà il valore all'intervallo corrente utilizzato. Quindi provare a eseguire questa procedura secondaria:
Sub ResetUsedRng()
Application.ActiveSheet.UsedRange
End Sub
In mancanza di questo si può anche avere un po 'di formattazione appeso attorno. Prova a cancellare/cancellare tutte le celle dopo l'ultima riga.
Per quanto riguarda quanto sopra vedi anche:
Un altro metodo per trovare l'ultima cella utilizzata:
Dim rLastCell As Range
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
cambiare la direzione di ricerca per trovare la prima cella utilizzata.
Readify ha fornito una risposta molto completa. Eppure, ho voluto aggiungere la dichiarazione End
, è possibile utilizzare:
Trovare l'ultima cella utilizzata, prima di un vuoto in una colonna:
Sub LastCellBeforeBlankInColumn()
Range("A1").End(xldown).Select
End Sub
Trova l'ultima cella utilizzata in una colonna:
Sub LastCellInColumn()
Range("A" & Rows.Count).End(xlup).Select
End Sub
Trova l'ultima cella, prima di un vuoto in una riga:
Sub LastCellBeforeBlankInRow()
Range("A1").End(xlToRight).Select
End Sub
Trova all'ultimo cella utilizzata in una riga:
Sub LastCellInRow()
Range("IV1").End(xlToLeft).Select
End Sub
Vedi here per ulteriori informazioni (e la spiegazione del perché xlCellTypeLastCell
non è molto affidabile).
Public Sub FindTrueUsedRange(RowLast As Long, ColLast As Long)
Application.EnableEvents = False
Application.ScreenUpdating = False
RowLast = 0
ColLast = 0
ActiveSheet.UsedRange.Select
Cells(1, 1).Activate
Selection.End(xlDown).Select
Selection.End(xlDown).Select
On Error GoTo -1: On Error GoTo Quit
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Activate
On Error GoTo -1: On Error GoTo 0
RowLast = Selection.Row
Cells(1, 1).Activate
Selection.End(xlToRight).Select
Selection.End(xlToRight).Select
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Activate
ColLast = Selection.Column
Quit:
Application.ScreenUpdating = True
Application.EnableEvents = True
On Error GoTo -1: On Error GoTo 0
End Sub
Ecco una coppia di funzioni per restituire l'ultima riga e il punto di un foglio di lavoro, in base alla soluzione di Reafidy riportata sopra.
Function LastRow(ws As Object) As Long
Dim rLastCell As Object
On Error GoTo ErrHan
Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByRows, _
xlPrevious)
LastRow = rLastCell.Row
ErrExit:
Exit Function
ErrHan:
MsgBox "Error " & Err.Number & ": " & Err.Description, _
vbExclamation, "LastRow()"
Resume ErrExit
End Function
Function LastCol(ws As Object) As Long
Dim rLastCell As Object
On Error GoTo ErrHan
Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByColumns, _
xlPrevious)
LastCol = rLastCell.Column
ErrExit:
Exit Function
ErrHan:
MsgBox "Error " & Err.Number & ": " & Err.Description, _
vbExclamation, "LastRow()"
Resume ErrExit
End Function
Uso il seguente codice vba per determinare le intere righe usate vanno per il foglio di lavoro per poi accorciare l'intervallo selezionato di una colonna:
Set rUsedRowRange = Selection.Worksheet.UsedRange.Columns(_
Selection.Column - Selection.Worksheet.UsedRange.Column + 1)
funziona anche viceversa:
Set rUsedColumnRange = Selection.Worksheet.UsedRange.Rows(_
Selection.Row - Selection.Worksheet.UsedRange.Row + 1)
+1 Bello, ho imparato qualcosa. (vedi?) –
Lo proverò. Ho finito per scrivere la mia funzione di ricerca. Fondamentalmente, se trovo una cella vuota, conto sulla successiva 100 righe. Se il totale è 0, presumo sia l'ultima riga. – thinkanotherone