Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 运行宏中的更改范围_Excel_Vba - Fatal编程技术网

Excel 运行宏中的更改范围

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

有没有办法改变运行宏的范围

例如,如果我在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 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