2011-01-31 10 views

Odpowiedz

8

Zrobione z here, to zaznaczyć wszystkie komórki w arkuszu:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column 
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row 
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select 
+0

+1: wielkie dzięki za link – horgh

2

nie zrobiłeś każdy excel rozwoju przez jakiś czas (Excel 2003), ale zawsze uważałem, że nagrywanie makra podczas wykonywania zadania, które chciałem wdrożyć w kodzie, mają wystarczające wskazówki, aby pomóc.

W tym przypadku, wybierając wszystkie komórki i autofitting daje kod:

Sub Macro1() 
    Cells.Select 
    Cells.EntireColumn.AutoFit 
End Sub 

które sobie wyobrazić, że z grubsza przetłumaczyć na:

((Microsoft.Office.Interop.Excel.Range)_sheet.Cells.Select()).AutoFit(); 

gdzie _sheet jest instancją arkusz, który” ponownie używać. (przetestowane)

2

Oficjalnie Excel.Worksheet.UsedRange.Rows i Excel.Worksheet.UsedRange.Columns.

W praktyce jest to błąd, należy odjąć wiersz początkowy i kolumnę. Najbliżej do prawidłowa odpowiedź brzmi:

Public ReadOnly Property LastColumn() As Integer 
     Get 
      Return ExcelWorksheet.UsedRange.Columns.Count + _ 
        ExcelWorksheet.UsedRange.Column - 1 
     End Get 
    End Property 
    Public ReadOnly Property LastRow() As Integer 
     Get 
      Return ExcelWorksheet.UsedRange.Rows.Count + _ 
        ExcelWorksheet.UsedRange.Row - 1 
     End Get 
    End Property 

ta zwraca przynajmniej wszystkie używane komórki, czasem trochę więcej. "Trochę więcej" może być spowodowane pustymi komórkami (zamiast pustymi) i innymi przypadkowymi rzeczami. Tworząc badania, które zrobiłem, jest to najlepsze, co można zrobić.

Jeśli naprawdę chcesz, aby wybrać wszystko następnie

ExcelWorksheet.Activate() 
ExcelWorksheet.Cells.Select() 
1

wiele czystsze i nie zależy od liczby wierszy/przełęcze, które zostały zwiększone w programie Excel 2007:

Pod Twój arkusz jest w zmiennej o nazwie wsData:

wsData.Range(wsData.Cells(1, 1), wsData.Cells(wsData.Rows.Count, wsData.Columns.Count)) 
+1

dla mnie wsData.Rows.Count zawsze powrócić 65536 zamiast używanych wierszy FYI –

10
public void refreshSheetColumsSize(Worksheet ws) 
{ 
    ws.get_Range("a1").EntireRow.EntireColumn.Select();   
} 
+1

Wygląda ładnie, ale mam ten wyjątek 'nie można niejawnie przekonwertować typu„bool”do„Microsoft.Office. Interop.Excel.Range'' – Yola

+0

get_range powinien zwracać zakres, a nie bool: https://msdn.microsoft.com/fr-fr/library/microsoft.office.tools.excel.worksheet.get_range.aspx wywołanie ws. get_Range ("a1"); w osobnym wierszu i debuguj wynik. – jocelyn

+1

usunięcie 'Select()' spowoduje to. Otrzymałem ten sam wyjątek co Yola. Mam na myśli, stwórz metodę, która zwraca 'Range' i zwróć' get_Range ("a1"). EntireRow.EntireColumn' – Veverke

6
Excel.Range theRange = (Excel.Range)CurrentSheet.UsedRange; 

W tym przykładzie CurrentSheet jest zmienną, w której zapisano arkusz, z którego aktualnie korzystasz.

0

rozważyć wszystkie komórki w arkuszu można napisać tak:

workSheet.Cells[workSheet.Rows.Count,workSheet.Columns.Count] 

LUB

workSheet.get_Range("A1","IV65536") 

Do rozważenia używane komórki w arkuszu, można napisać:

workSheet.Rows.SpecialCells(XlCellType.xlCellTypeLastCell, XlSpecialCellsValue.xlTextValues) 

Gdzie "arkusz roboczy" reprezentuje arkusz, nad którym pracujesz. Obydwa przykłady kodu zwracają zakres.

Mam nadzieję, że pomoże!

0

Bardzo prosta:

xlWorkSheet.UsedRange.Columns.Select() 
0
 xlWorksheet.get_Range("a1").EntireRow.EntireColumn.AutoFit(); 
     xlWorksheet.get_Range("a1").EntireColumn.EntireRow.AutoFit(); 

Po wypełnieniu komórka została zakończona.

Powiązane problemy