如何更改命名范围的引用?

时间:2018-10-16 15:24:07

标签: excel-vba

我想通过操作的结果来移动命名范围的行引用,例如: Sheets("Data").Range("Range1").Offset(a-b, 0)

我必须使用什么语法来成功更改: Range1 = $ A $ 100到Range1 = $ A $(100+(a-b))?

感谢任何帮助

编辑: 当然,斯科特,我正在尝试将名为range的RowMarker重设回其原始值,但是语法不正确:

在此子上方,我有这个:

Public lngRowData As Long

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngData As Range
Set rngData = ThisWorkbook.Names("RowMarker").RefersToRange
If lngRowData = 0 Then
lngRowData = rngData.Row
    Exit Sub
End If
If rngData.Row = lngRowData Then Exit Sub
If rngData.Row < lngRowData Then
    MsgBox lngRowData - rngData.Row & " rows removed, repairing formulas"
Else
    MsgBox rngData.Row - lngRowData & " rows added, repairing formulas"
End If
lngRowData = rngData.Row

End Sub

我将其插入下面的if语句中,以便lngRowData和rngData.row之间的结果成为偏移量。

谢谢你们

2 个答案:

答案 0 :(得分:1)

这可以做到:

ActiveWorkbook.Names.Item("Range1").RefersTo = "=Data!" & Range("Range1").Offset(a - b, 0).Address

答案 1 :(得分:1)

我总是发现RefersToRange有点麻烦,所以这是另一种方法。

Sub x()

Dim a As Long, b As Long

a = 50
b = 10

With Sheets("Data")
    .Range("A100").Name = "Range1"
    Debug.Print Range("Range1").Address 'A100
    .Range("Range1").Offset(a - b, 0).Name = "Range1"
    Debug.Print Range("Range1").Address 'A140
End With

End Sub