Excel 运行宏中的更改范围
有没有办法改变运行宏的范围 例如,如果我在macro1中有Excel 运行宏中的更改范围,excel,vba,Excel,Vba,有没有办法改变运行宏的范围 例如,如果我在macro1中有 Public rng1 As Range ' ... Set rng1 = Range("K10").Offset(i, 0) 我想使用macro2将位置更改为右侧的1个单元格 大概是这样的: Set rng1 = rng1.Offset(0, 1) 这是可能的还是有别的办法 全部代码: Public rng1 As Range Sub tert() Dim rng As Range Dim rnga As Range Dim
Public rng1 As Range
' ...
Set rng1 = Range("K10").Offset(i, 0)
我想使用macro2将位置更改为右侧的1个单元格
大概是这样的:
Set rng1 = rng1.Offset(0, 1)
这是可能的还是有别的办法
全部代码:
Public rng1 As Range
Sub tert()
Dim rng As Range
Dim rnga As Range
Dim i As Integer
i = 0
Do
DoEvents
Set rng1 = Range("K10").Offset(i, 0)
Set rng = Range("J10").Offset(i, 0)
Set rnga = Union(rng, rng1)
rng.Interior.ColorIndex = 3
rng1.Interior.ColorIndex = 3
rng.Offset(-4, 0).clear
rng1.Offset(-1, 0).clear
i = i + 1
Application.Wait (Now + TimeValue("00:00:01"))
If Not Intersect(Range("A30:Z30"), rnga) Is Nothing Then Exit Sub
If rng.Offset(1, 0).Interior.ColorIndex = 3 Then Exit Sub
Loop
End Sub
Sub rightx()
Set rng1 = rng1.Offset(0, 1)
End Sub
为了演示它的工作原理:
Option Explicit
Sub DynamicRange()
Dim rng1 As Range
Dim i As Long
' let's take 1 as the offset value
i = 1
Set rng1 = Range("K10").Offset(i, 0)
Debug.Print rng1.Address ' << you get $K$11
Set rng1 = rng1.Offset(0, i)
Debug.Print rng1.Address ' << you get $L$11
End Sub
这是一个基本的例子。通过在过程之外声明范围,它可以用于模块中的任何子模块
Dim rng As Range
Sub test1()
Dim i As Integer
For i = 1 To 2
Set rng = Range("K10").Offset(i, 0)
Debug.Print rng.Address
OffsetRange
Debug.Print rng.Address
Next i
End Sub
Sub OffsetRange()
Set rng = rng.Offset(0, 1)
End Sub
这不是一段特别有用的代码——它所做的只是偏移和调试该位置。然而,它应该说明一种解决问题的方法你试过了吗?当你尝试你的提议时发生了什么?这是其中一种情况,如果你花时间去问,你已经得到了答案。现在,如果您尝试了它,但它不起作用,那是另一个问题…让我告诉您一个秘密,是的,它起作用:)您可以使用
Debug.Print rng1.Address
在即时窗口中查看它是的,我尝试过,发生的是。。。完全没有:)@Pawel运行我下面答案中的代码,看看你在即时窗口中得到了什么,如果你不初始化i
它将等于0
,因此你将设置rng1=Range(“K10”)。偏移量(0,0)
,这将是相同的范围K10
;也许这就是问题所在?:)好的,但我需要这个:Set rng1=rng1.Offset(0,I)
放在另一个宏中,我想在第一个宏(循环)运行时执行此操作。我刚刚将整个代码添加到我的问题中,以便给大家一个更好的答案view@Pawel我的代码对你有用吗?因为现在你上传了你的代码,这是一个完全不同的帖子,因为你要求我们调试它,而不理解你想要实现什么?我现在有点困惑。我粘贴的代码不起作用。你的代码运行得很好,但是当我将它调整到我的代码时,如果它不运行的话。我想我一开始问错问题了。很抱歉。
Dim rng As Range
Sub test1()
Dim i As Integer
For i = 1 To 2
Set rng = Range("K10").Offset(i, 0)
Debug.Print rng.Address
OffsetRange
Debug.Print rng.Address
Next i
End Sub
Sub OffsetRange()
Set rng = rng.Offset(0, 1)
End Sub