Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:具有偏移量的多个命名范围_Excel_Vba - Fatal编程技术网

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
表示名称确实引用函数