2016-09-21 62 views
0

我循環創建,我想申請8個工作表的通用範圍相同的動態範圍(這是從值之外相同。)參考多個工作表

For j = 2 To blockNo 
row1 = 3 + (j - 1) * (pronum + 18) 
row2 = row1 + pronum - 1 
Set rng2 = Union(rng2, Range("Q" & row1 & ":BA" & row2)) 
Next j 

For k = 1 To 8 
Sheets(k).Activate 
rng2.Copy........ 

它的工作不是因爲RNG2是工作相關的,所以它是從表1

我認爲有以下可能的解決方案複製範圍值,但它不是優雅,將是緩慢的。

For k = 1 To 8 
    Sheets(k).Activate 
    For j = 2 To blockNo 
    row1 = 3 + (j - 1) * (pronum + 18) 
    row2 = row1 + pronum - 1 
    Set rng2 = Union(rng2, Range("Q" & row1 & ":BA" & row2)) 
    Next j 
    rng2.Copy........ 

我試着張(K).range(rng2.address),但這似乎僅限於一定數目的字符,所以我的範圍不會捕捉整個RNG2的。

是否有另一種解決方案?

回答

0

假設地址過長傳遞給.Range()直接,我能想到的是最好使用Union手動重新創建範圍:

For j = 2 To blockNo 
    row1 = 3 + (j - 1) * (pronum + 18) 
    row2 = row1 + pronum - 1 
    Set rng2 = Union(rng2, Range("Q" & row1 & ":BA" & row2)) 
Next 

Dim sheet As Worksheet 
Dim target As Range 
For k = 1 To 8 
    Set sheet = Sheets(k) 
    Set target = sheet.Range(rng2.Cells(1, 1).Address) 
    Dim cell as Range 
    For Each cell In rng2.Cells 
     Set target = Union(sheet.Cells(cell.Row, cell.Column), target) 
    Next cell 
    sheet.Activate 
    rng2.Copy........ 
Next