2016-03-16 4 views
1

У меня есть рабочий лист с матрицей, который по диагонали разделен на черную. Матрица содержит один и тот же заголовок как по вертикали, так и по горизонтали. Идея состоит в том, что вы показываете связь между элементами в нижней области под диагональю.Создание диапазона от нескольких диапазонов в excel vba

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

Что я пытаюсь сделать, это создать диапазон для каждого столбца, который я использую, и добавить его в MatrixRange. Поэтому разные диапазоны, которые пытаются совместить, имеют разную высоту.

Dim MatrixRange As Range 

Private Sub Workbook_Open() 

Dim n As Integer 
Dim NextRange As Range 
Dim OldRange As Range 
Dim ws As Worksheet 

Set ws = Sheets("Systemmatrise") 

With ws 
    For n = 1 To 68 
     Set OldRange = MatrixRange 
     Set NextRange = .Range(Range("B9").Offset(n + 1, n), Cells(78, n + 2)) 
     Set MatrixRange = Union(OldRange, NextRange) 

    Next n 

End With 

Debug.Print MatrixRange 

End Sub 

Я получаю «Ошибка выполнения 5» после

Set MatrixRange = Union(OldRange, NextRange) 

есть более простой способ создать этот диапазон, или как-то решить эту проблему?

Заранее спасибо

ответ

0

Вам не кажется, чтобы установить начальный диапазон для OldRange, так что не будет ничего во время первой итерации - вероятная причина ошибки.

Удалить эту строку:

Set OldRange = MatrixRange 

Правильная эта линия включать точку перед Cells:

Set NextRange = .Range(Range("B9").Offset(n + 1, n), .Cells(78, n + 2)) 

и до цикла For Loop, добавьте это (дополнительная точка отметить, спасибо Jeeped) :

Set OldRange = .Range(.Range("B9").Offset(1,0), .Cells(78, 2)) 
+0

Он также может использовать «точку» перед «.Range (« B9 »)». – Jeeped

+0

Спасибо за ваш ответ! – eklo

+0

Добро пожаловать. Если это сработало, отметьте его. – NeepNeepNeep