Адресное свойство / функция для возврата адреса ячейки в виде пары / списка / массива целых чисел

Я в тупике с функцией () и sub (). Мой код:

sub test() Dim Firstrow, FirstCol As Integer Workbooks("wb").Activate Workbook(1).Worksheet(1).Select FirstRow = 16 FirstCol = 20 LastCell = FindLastcell(FirstRow,FirstCol) 'LastCell is in "RiCj" format FirstCell = Cells(FirstRow, FirstCol).Address(ReferenceStyle:=xlR1C1) 'FirstCell is in "RiCj" format RngSelect = Range(FirstCell, LastCell).Select 'Range Method has failed. Obvious. See [1] [more code to copy as text on Notepad the selection] End Sub 

Теперь моя функция:

 Public Function FindLastCell(ByVal int1 As Integer, ByVal int2 As Integer) As Variant ' what kind of return dim shall I choose ? ' find first empty cell in a range and return its adress LastRow = Cells(Rows.Count, int1).End(xlUp).Row LastCol = Cells(int2, Columns.Count).End(xlToLeft).Column FindLastCell = Cells(LastRow, LastCol).Address(ReferenceStyle:=xlR1C1) End Function 

После того, как вы попробовали много вариантов, я не могу получить желаемый результат. Лучше всего было бы:

  • Моя функция должна возвращать список или массив целых чисел для использования в качестве адреса ячейки в этом стиле. Ячейки (int1, int2)
  • В моем суб (), написав что-то вроде этого:

    RngSelect = Диапазон (ячейки (i, j), ячейки (k, l)).

Я не знаю, как добиться этого отклонения в моей функции или в моей ошибке.

[1] http://msdn.microsoft.com/en-us/library/office/ff838238.aspx Если вы используете текстовый аргумент для адреса диапазона, вы должны указать адрес в нотации A1 (вы не можете использовать R1C1 -образная нотация).

Спасибо за помощь.

Немногие вещи …

  1. Когда вы объявляете переменные как Dim Firstrow, FirstCol As Integer в VBA, тогда только последняя переменная будет объявлена ​​как Interger . Первый будет объявлен как variant . Используйте это вместо этого. Dim Firstrow As Integer, FirstCol As Integer
  2. При работе с строками избегайте объявления переменных строки как Integer . Объявите тогда как Long . В Excel 2007+ объявление их как целого может привести к ошибке Overflow .
  3. Избегайте использования .Select/.Activate READ
  4. Полностью квалифицируйте свои объекты. Например, объект Cells может дать вам ошибку или неожиданные результаты.
  5. Избегайте использования чисел в Worksheet(1) . Используйте либо имена, либо имена кодов. Это делается для того, чтобы вы работали с правым листом в случае перетаскивания листов.

Теперь по вашему запросу.

Вам не нужна функция. Видеть это

 Dim wb As Workbook Dim ws As Worksheet Sub test() Dim Firstrow As Long, FirstCol As Long Dim FirstCell As String, LastCell As String Dim RngSelect As Range Firstrow = 16: FirstCol = 20 '~~> Change this to the relevant path Set wb = Workbooks.Open("C:\wb.xlsx") Set ws = wb.Sheets("Sheet1") With ws FirstCell = Split(.Cells(, FirstCol).Address, "$")(1) & Firstrow LastRow = .Cells(.Rows.Count, FirstCol).End(xlUp).Row LastCol = .Cells(Firstrow, .Columns.Count).End(xlToLeft).Column LastCell = Split(.Cells(, LastCol).Address, "$")(1) & LastRow Set RngSelect = ws.Range(FirstCell & ":" & LastCell) Debug.Print RngSelect.Address End With ' '[more code to copy as text on Notepad the selection] ' End Sub 

Однако, если вам по-прежнему нужна функция, см. Это.

 Dim wb As Workbook Dim ws As Worksheet Sub test() Dim Firstrow As Long, FirstCol As Long Dim FirstCell As String, LastCell As String Dim RngSelect As Range Firstrow = 16: FirstCol = 20 '~~> Change this to the relevant path Set wb = Workbooks.Open("C:\wb.xlsx") Set ws = wb.Sheets("Sheet1") With ws FirstCell = Split(.Cells(, FirstCol).Address, "$")(1) & Firstrow LastCell = FindLastCell(FirstCol, Firstrow) Set RngSelect = ws.Range(FirstCell & ":" & LastCell) Debug.Print RngSelect.Address End With ' '[more code to copy as text on Notepad the selection] ' End Sub Public Function FindLastCell(ByVal int1 As Long, ByVal int2 As Long) As String Dim LastRow As Long, LastCol As Long With ws LastRow = .Cells(.Rows.Count, int1).End(xlUp).Row LastCol = .Cells(int2, .Columns.Count).End(xlToLeft).Column FindLastCell = .Cells(LastRow, LastCol).Address End With End Function 
Давайте будем гением компьютера.