2016-02-26 9 views
0

Я не уверен, что это можно сделать для начала., генерирующий диапазон от других ячеек excel vba

я итерация через несколько клеток и в какой-то момент я хочу, чтобы определить диапазон, как это:

Set rngtmp = Range(f.Column & c.Row & ":" & g.Column & c.Row) 

е и г указывают на отдельные клетки, и они все в порядке (я имею в виду, что они работают нормально), потому что я также выполняю некоторые операции, беря их за ссылку, и они работают.

c является ячейкой, в которой я нахожусь (поскольку я выполняю итерацию по всем ячейкам). Диапазон всегда пуст, и я не понимаю, почему.

f.column меньше g.column

+0

Возможная дубликата [Создать первенствует диапазонов с использованием номера столбцов в VBA?] (http://stackoverflow.com/questions/13157363/create-excel-ranges-using-column-numbers-in-vba) – eirikdaude

ответ

1

Используйте Cells, чтобы обратиться к одной ячейке. Вы можете присоединиться к этим в диапазоне:

Sub Test() 
    Dim rngtmp As Range 
    Dim f As Range 
    Dim c As Range 
    Dim g As Range 

    With ThisWorkbook.Worksheets("Sheet1") 
     Set f = .Range("A1") 
     Set c = .Range("D8") 
     Set g = .Range("L22") 
     Set rngtmp = .Range(.Cells(c.Row, f.Column), .Cells(g.Column, c.Row)) 
    End With 
End Sub 

Обратите внимание, что .Range и .Cells будет ссылаться на Лист1 в связи с With...End With блока.
https://msdn.microsoft.com/en-us/library/wc500chb.aspx

3

Вы можете использовать .Cells() property.

Dim wb As Workbook, ws As Worksheet 
Dim rngTmp As Range 

Set wb = ThisWorkbook 
Set ws = wb.Sheets(1) 

With ws 
    Set rngTmp = .Range(.Cells(c.Row, f.Column), .Cells(c.Row, g.Column)) 
End With 

Вы не можете использовать целые числа для определения размера объекта диапазона; вы должны использовать свойство .Cells, чтобы использовать целые числа для построения диапазона.

Edit:

Как @Scott Holtzman упоминалось, вы должны в первую очередь пройти .Row, а затем .Column в .Cells (противоположность тому, как вы это показано в вашем вопросе).

Как указано ниже, вы можете использовать .Range, а затем использовать .Resize property; это позволяет использовать целые числа с диапазоном, вместо того, чтобы использовать свойство .Cells. Это подход, который я обычно использую при написании массивов на листе.

+0

также стоит отметить, как сначала возникает свойство строки, а затем столбец, поскольку OP имел его другим способом вокруг) –

+0

Вы можете использовать целые числа для определения размера объекта диапазона, но это проще, просто выполните Как и у вас ;-) – eirikdaude

+0

Спасибо, оба - я обновил свой ответ, чтобы включить ваши предложения. @eirikdaude Я предполагаю, что вы ссылались на свойство .Resize. В противном случае я был бы заинтригован услышать о том, как вы также можете использовать целые числа с объектом диапазона! –

0

Вы не можете использовать .Column как он возвращает целочисленный индекс столбца, а не письмо.

попробовать что-то вдоль линий

set rngtmp = Range(Cells(f.Row, c.Column), Cells(g.Row, c.Column))

конечно вам нужно будет ссылаться на листы и ячейки, и такие, как требуется

Смежные вопросы