提问人:Tounn 提问时间:10/24/2023 最后编辑:Tounn 更新时间:10/25/2023 访问量:46
VBA:合并在偏移范围方面的行为方式
VBA : How does Merge behave regarding to an Offset'ed Range
问:
以下代码中的问题是,被合并的始终是 .range
Range("A1:B2")
'how the range are set (they're dim'ed as Range)
Set Range1 = Sheet1.Range("A1:B2")
Set Range2 = Sheet2.Range("A1:B2")
For i = 1 To col1.Count 'collection with data which will be used further in the code
If i <> 1 Then 'checking that we're not at the first item
Sheet1.Rows(range_row + 2 & ":" & range_row + 3).Insert 'range row = 1 at start
Sheet2.Rows(range_row + 2 & ":" & range_row + 3).Insert
Sheet1.Rows("61:62").Delete
Sheet2.Rows("61:62").Delete
Set Range1 = Range1.Offset(1, 0) 'I've tried with Offset 2 it changes nothing
Set Range2 = Range1.Offset(1, 0)
Range1.Merge
Range2.Merge
range_row = range_row + 2
End If
'other operations not affecting the size of the range
Next i
目标是合并然后然后等等......Range("A1:B2")
Range("A3:B4")
Range("A5:B6")
我所拥有的:
目标
Offset
方法应将范围向下移动,以便由于该方法可以合并 2 行。显然,经过一些调试后,问题似乎是总是合并。但是在我的代码中,我在这个 Range 中存储了一个值,它位于正确的单元格中.......Merge
Range("A1:B2")
是不喜欢偏移范围吗?我应该为我的两个范围做一个不同的声明吗?Merge
As New
请注意,每个变量都是暗淡的,并且具有正确的值,期望 Range。
答:
2赞
FaneDuru
10/24/2023
#1
请看一下合并两个 adiacent 列的下一个方法:
Sub TesteMergeCells1()
Dim i As Long
For i = 1 To 10 Step 2 'use here your collection number of elements instead of 10
Range("A" & i, "B" & i + 1).merge
Next i
End Sub
Sub TesteMergeCells2()
Dim i As Long, rngA As Range
For i = 1 To 10 Step 2
Set rngA = Range("A" & i)
Range(rngA, rngA.Offset(1, 1)).merge
Next i
End Sub
Sub TesteMergeCells3()
Dim i As Long, rngAB As Range
Set rngAB = Range("A1:B2")
For i = 2 To 6
rngAB.merge
Set rngAB = rngAB.Offset(1).Resize(2, 2)
Next i
End Sub
设置不会产生动态范围。它始终是相同的范围。Set Range1 = Sheet1.Range("A1:B2")
我只是试着展示这个原理。我认为,让它适应你的两张纸应该很容易。现在我必须离开我的办公室......
评论
0赞
Tounn
10/24/2023
很好的解释,它现在对我有用,但这意味着即使我之后像这样重新定义范围,VBA 也会保留传递的第一个定义,这里是一个硬编码值。(我要离开了,我明天会看到答案,但我已经解决了我的问题。Set Range1 = Range1(1, 0)
Set
0赞
FaneDuru
10/24/2023
@Etienne NAMUR 您需要调整每个迭代行的范围!
评论
Col1
range_row
i
Col1
Range_row
Range("A1:B2")
Range("A3:B4")
Range("A1:B2")