假设
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
答案 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
答案 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