将相同的变量保存在不同的活动表中

时间:2017-10-12 05:19:40

标签: vba

假设

Sheets("Sheet1").Activate
Dim Begin as Range
Set Begin = Range("A10")

当我使用

Sheets("Sheet2").Activate

Begin似乎不是Range("A10")中的Sheet2,那么如何让Begin成为Range("A10")中的Sheet2

我展示了我的完整代码,你可以看到,对于每个循环,我想要处理每个工作表以进行相同的操作。但是我的代码看起来很乏味,如果我想将Range("A10")更改为Range("A9"),那么我应该手动更改每个代码。

Module1.Re()也会使用Range("A10"),实际上在每个循环中,我想将变量Range("A10").Offset(i,0)传递到每个工作表中,但它是相应工作表中的单元格。

这就是为什么我想用公共变量替换Range("A10") Begin.你能帮我简化一下我的代码,实际上我是VBA的新手。

Modules2

Sub Main()
Sheets("Sheet1").Activate

Z = 5
Y = 10

Dim Column As Integer
Dim Row As Integer

Set Begin = Range("A10")


Row = Begin.End(xlDown).Row - Begin.Row

For i = 1 To Row
    Sheets("1 HK").Activate
    Module1.Re (i)
    Sheets("5 HK").Activate
    Module1.Re (i)

    Sheets("1 HK").Activate
    Set Begin1 = Range("A10").Offset(i + 1, 4)
    Set Begin2 = Range("A10").Offset(i + Z, 4 + Y)
    Range(Begin1, Begin2).Clear

    Sheets("5 HK").Activate
    Set Begin1 = Range("A10").Offset(i + 1, 4)
    Set Begin2 = Range("A10").Offset(i + Z, 4 + Y)
    Range(Begin1, Begin2).Clear                
Next i   
End Sub

2 个答案:

答案 0 :(得分:1)

您已选择活动表格为sheet1

Sheets("Sheet1").Activate

将此更改为

Sheets("Sheet2").Activate

如果您希望将其作为活动工作表,请设置范围OR

更好的做法是完全限定您的变量并确保您的声明处于开始状态,这样您就不会出现错误

Option Explicit 'Putting this means variables must be declared and spelling is checked for you

Dim wb as Workbook
Dim ws as Worksheet
Dim ws1 as Worksheet
Dim Begin as Range

Set wb = ThisWorkbook  'ensure you end up working with the right workbook
Set ws = wb.Sheets("Sheet2") 'ensure you end up working with the right sheet    
Set ws1 =  wb.Sheets("Sheet1")
Set Begin = ws.Range("A10")

稍后您可以使用With语句来获得更高效的代码。

With ws1 'using Sheet1

  'code for working with Sheet1
End With

注意:Setting Option Explicit

答案 1 :(得分:0)

标准模块中的公共财产怎么样?

Public Property Get BeginRange() As Range
    Set BeginRange = Application.ActiveSheet.Range("A10")
End Property

Dim r As Range
Set r = ModuleName.BeginRange  'ModuleName is not required, only added for clarity