2016-09-19 40 views
-1

我想知道是否有任何方法可以更改運行宏的範圍?例如,如果我有:更改運行宏的範圍

Public rng1 As Range 
在宏1

Set rng1 = Range("K10").Offset(i, 0),我想改變位置,以1元到正確的 - 用macro2 - 某事像這樣:

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 
+1

您試過嗎?當你嘗試你提出的建議時發生了什麼?這就是其中一種情況,就是你要問的時間,你已經有了答案。現在,如果你嘗試了它,但它不工作,那是一個單獨的問題...... – sous2817

+0

讓我告訴你一個祕密,是的,它的工作原理:)你可以使用'Debug.Print rng1.Address'和在眼前的窗口看到它 –

+0

y我試過了,會發生什麼是...完全沒有:) – Pawel

回答

1

只是爲了demonstarte它是如何工作的:

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 

編輯1:將代碼放在2個獨立的Sub S,移動子外rng1聲明,宣佈它爲Public

Option Explicit 

' moved the rng1 declaration outside the Sub and declared it as Publi 
Public rng1 As Range 

Sub Call2Macros() 

Call DynamicRange 
Call DynamicRange2 

End Sub 

Sub DynamicRange() 

Dim i  As Long 

i = 1 
Set rng1 = Range("K10").Offset(i, 0) 
Debug.Print rng1.Address ' << you get $K$11 

End Sub 

Sub DynamicRange2() 

Dim i  As Long 

i = 2 
Set rng1 = rng1.Offset(0, i) 
Debug.Print rng1.Address ' << you get $M$11 

End Sub 
+0

好的,但我需要這個:'Set rng1 = rng1。偏移量(0,i)'放在另一個宏中,我想在第一個宏(循環)運行時執行此操作 – Pawel

+0

@Pawel嘗試編輯的代碼(編輯1) –

+0

我剛剛將整個代碼添加到了我的問題給你們一個更好的看法 – Pawel

0

這是一個基本的例子。通過聲明你的程序以外的範圍內,可以使用任意的子您的模塊

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 

在這不是代碼的特別有用的片 - 它是所有偏移和調試該位置。但是,它應該說明一種方法可以解決您的問題