2012-08-30 15 views
8

Chcę wybrać sformatowany zakres arkusza programu Excel. Aby zdefiniować ostatni i pierwszy wiersz używam następujące funkcje:VBA: Wybór zakresu według zmiennych

lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count 
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row 

W następnym kroku chcę wybrać ten obszar: Formuła powinna wyglądać następująco:

Range(cells(1, 1), cells(lastRow, lastColumn).Select 

to jednak nie działa. Może ktoś ma pojęcie, co jest z nim nie tak. Wielkie dzięki!

+0

Co dokładnie nie działa? Próbowałem wypełnić zakres od B2 do D4 losowymi danymi, a twój kod został wybrany od A1 do D4. Czy tego nie oczekujesz? – ssarabando

Odpowiedz

6

Jeśli chcesz po prostu wybrać wykorzystywany zakres, użyj

ActiveSheet.UsedRange.Select 

Jeśli chcesz wybrać od A1 do końca wykorzystywany zakres, można użyć metody SpecialCells tak

With ActiveSheet 
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select 
End With 

Czasami program Excel jest zdezorientowany na temat ostatniej komórki. To nigdy nie jest mniejszy zakres niż rzeczywisty używany zakres, ale może być większy, jeśli niektóre komórki zostały usunięte. Aby tego uniknąć, możesz użyć Znajdź i gwiazdkę z gwiazdką, aby znaleźć prawdziwą ostatnią komórkę.

Dim rLastCell As Range 

With Sheet1 
    Set rLastCell = .Cells.Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious) 

    .Range(.Cells(1, 1), rLastCell).Select 
End With 

Na koniec upewnij się, że wybierasz tylko wtedy, gdy naprawdę potrzebujesz. Większość tego, co musisz zrobić w Excel VBA, możesz zrobić bezpośrednio w Zasię zamiast wybierać ją najpierw. Zamiast

.Range(.Cells(1, 1), rLastCell).Select 
Selection.Font.Bold = True 

Można

.Range(.Cells(1,1), rLastCells).Font.Bold = True 
3

Brakuje ścisłej nawias, to znaczy nie zamykasz Range().

Spróbuj Range(cells(1, 1), cells(lastRow, lastColumn)).Select

Ale trzeba naprawdę spojrzeć na drugą odpowiedź od Dick Kusleika ewentualnych rozwiązań alternatywnych, które mogą służyć Ci lepiej. W szczególności, ActiveSheet.UsedRange.Select, który ma taki sam efekt końcowy jak twój kod.

22

nagrałem makro z „Odwołania względne” i to, co mam:

Range("F10").Select 
ActiveCell.Offset(0, 3).Range("A1:D11").Select 

Herezje co pomyślałem: Jeżeli wybór zakresu jest w cudzysłowie, VBA naprawdę chce ciąg i interpretuje komórki out z tego tak próbowałem:

Dim MyRange as String 
MyRange = "A1:D11" 
Range(MyRange).Select 

I działało :) czyli ..po prostu utworzyć ciąg przy użyciu zmiennych, należy zwymiarować go jako zmiennych tekstowych i Excel będzie czytać tuż przy nim;)

Obserwowany przetestowane i uznane robocze:

Sub Macro04() 

Dim Copyrange As String 

Startrow = 1 
Lastrow = 11 
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow 
Range(Copyrange).Select 
End Sub 
1

jesteś obracając je w adres ale Cells (#, #) używa wejścia całkowitymi nie zająć wejść tak po prostu użyć lastRow = ActiveSheet.UsedRange.Rows.count i lastColumn = ActiveSheet.UsedRange.Columns.Count

1

Próbowałem za pomocą:

Range(cells(1, 1), cells(lastRow, lastColumn)).Select 

gdzie lastRow i lastColumn są liczbami całkowitymi, ale otrzymały błąd czasu wykonywania 1004. Używam starszej wersji VB (6.5).

Co zrobił pracy było użyć następujących:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select. 
+1

Właściwie firstColumn powinien przeczytać lastRow ==> Range (Chr (64 + firstColumn) i firstRow & ":" & Chr (64 + lastColumn) i lastRow) .Selec –

7

wpadłem na coś podobnego - Chciałem stworzyć szereg opartą na pewnych zmiennych. Korzystanie z arkusza Works.Cells nie działa bezpośrednio, ponieważ uważam, że wartości komórki zostały przekazane do Range.

ta nie działa jednak:

Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select 

To zadbał o przekształcenie komórki numeryczną lokalizację do tego, co oczekuje Zakres, który jest w formacie A1.

+0

Dzięki, spędziłem cały ranek próbując dowiedzieć się, jak naprawić problem składniowy z tego powodu. :) – Michelle

+0

Dziękuję, że uratowałeś mój dzień! –

Powiązane problemy