Excel VBA:具有偏移量的多个命名范围
我有以下代码Excel VBA:具有偏移量的多个命名范围,excel,vba,Excel,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 R
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、范围P3F的单元格CF1、范围P4F的单元格CS1的值确定。起始单元格保持不变(单元格G3、T3、AG3、…、CT3)
如何在现有模块中正确插入偏移函数
谢谢大家! 第一个范围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
对于第一个范围,使用
ActiveWorkbook.Names.Add Name:=Replace(ws.Name & "_C1F", " ", "_") _
, RefersTo:="=offset($G$3,,,$F$1)" _
, MacroType:=1
进行类似更改以设置其他动态范围
MacroType:=1
表示名称确实引用函数