2017-10-12 53 views
1

假設保持相同的變量在不同的活動表

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

當我使用

Sheets("Sheet2").Activate 

Begin似乎沒有Sheet2Range("A10"),那麼如何使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

相關:https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba –

回答

1

您已經選擇了activesheet與

Sheets("Sheet1").Activate 

將工作表Sheet1如果希望成爲活動工作表,然後要麼將其更改爲

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 ws1 'using Sheet1 

    'code for working with Sheet1 
End With 

注:Setting Option Explicit

+0

非常感謝,請查看更新 –

+0

什麼是Module1.Re ?不要使用Row/Column作爲變量行,使用類似totalRows/totalColumns的東西。它更具描述性,不會與Row/Column對象混淆。您正在循環中創建新的未聲明的變量。別。請使用Option Explicit和Declare變量在頂部或接近使用位置(但不要在試圖分配的位置之後)。讓最外層的循環成爲您的表格(例如1到Sheets.count) – QHarr

+0

您可以將'Module1.Re()'作爲我在其他模塊中定義的函數。你的意思是最好使用Option Explicit,並用'Dim as'來聲明每個變量' –

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 
相關問題