2017-05-24 82 views
0

我有以下代碼VBA:使用多個命名的範圍偏移

Sub NamedRange() 
Application.ScreenUpdating = False 
Dim ws As Worksheet 
Dim rangeC1F As Range 
Dim rangeC2F As Range 
Dim rangeC3F As Range 
Dim rangeC4F As Range 
Dim rangeP1F As Range 
Dim rangeP2F As Range 
Dim rangeP3F As Range 
Dim rangeP4F As Range 

    For Each ws In ThisWorkbook.Worksheets 
    ws.Activate 
    With ActiveWindow 
     Set rangeC1F = ws.Range("G3:G100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C1F", " ", "_"), RefersTo:=rangeC1F 
     Set rangeC2F = ws.Range("T3:T100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C2F", " ", "_"), RefersTo:=rangeC2F 
     Set rangeC3F = ws.Range("AG3:AG100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C3F", " ", "_"), RefersTo:=rangeC3F 
     Set rangeC4F = ws.Range("AT3:AT100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C4F", " ", "_"), RefersTo:=rangeC4F 
     Set rangeP1F = ws.Range("BG3:BG100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_P1F", " ", "_"), RefersTo:=rangeP1F 
     Set rangeP2F = ws.Range("BT3:BT100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_P2F", " ", "_"), RefersTo:=rangeP2F 
     Set rangeP3F = ws.Range("CG3:CG100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_P3F", " ", "_"), RefersTo:=rangeP3F 
     Set rangeP4F = ws.Range("CT3:CT100") 
     ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_P4F", " ", "_"), RefersTo:=rangeP4F 
    End With 
Next            
Application.ScreenUpdating = True           
End Sub 

此代碼讓我能夠創建定義/命名爲範圍內的大量紙張。但是,對於當前的代碼,範圍是靜態的。我想用「偏移」功能讓它們變成動態的。 範圍的長度由範圍C1F的小區F1,範圍C2F的小區S1,範圍C3F的小區AF1,範圍C4F的小區AS1,範圍P1F的小區BF1,範圍P2F的小區BS1,小區CF1的小區BS1對於範圍P3F,範圍P4F的單元CS1。起始單元格保持不變(單元格G3,T3,AG3,...,CT3)

如何在現有模塊中正確插入偏移量函數?

謝謝!

回答

0

第一個,範圍C1F,可以改爲:

ws.Names.Add Name:=Replace(ws.Name & "_C1F", " ", "_"), RefersToR1C1:="=OFFSET(R3C7,0,0,R1C6,1)" 

然後相應地更改休息。

另外,如果你想範圍改變每次運行代碼:

ws.Names.Add Name:=Replace(ws.Name & "_C1F", " ", "_"), RefersToR1C1:="=OFFSET(R3C7,0,0,」 & RowLength & " ,1)" 

,你做

RowLength=range(「F1」).value 
+0

謝謝!它完美的作品 – HJA24

0

對於剛剛第一個範圍,使用

ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C1F", " ", "_") _ 
, RefersTo:="=offset($G$3,,,$F$1)" _ 
, MacroType:=1 

進行類似的更改以設置其他動態範圍。

MacroType:=1表示該名稱確實指的是一個函數。