Excel 基于vba更改目标地址位置
我有一个代码,它使用Target.Address根据单元格J17中的单元格值插入行。我想在下面一行使用类似的代码;但是,它下面的行的位置取决于添加的行数。 有人知道一种将迭代次数添加到地址行的方法吗? 我知道如何使用Cells函数实现这一点,但我喜欢Target.Address的自动运行 这是我的密码:Excel 基于vba更改目标地址位置,excel,vba,Excel,Vba,我有一个代码,它使用Target.Address根据单元格J17中的单元格值插入行。我想在下面一行使用类似的代码;但是,它下面的行的位置取决于添加的行数。 有人知道一种将迭代次数添加到地址行的方法吗? 我知道如何使用Cells函数实现这一点,但我喜欢Target.Address的自动运行 这是我的密码: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$J$17" Then Dim i A
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$17" Then
Dim i As Integer
For i = 1 To Target.Value
Cells(18, 9).EntireRow.Insert
Cells(18, 9).Value = i
Next i
End If
端接头
有人知道一种将迭代次数添加到地址行的方法吗
当然。那部分是基本的。您可以使用Offset
方法计算范围的新地址。但是你需要把它放在某个地方。您可以创建CustomDocumentProperty
、隐藏工作表或命名范围变量。所有这些都很好
但最好的解决方案可能只是将该单元最初定义为一个命名范围。命名范围是整洁的,因为它们是动态的。如果插入行/列或删除行/列,则名称
将随单元格一起移动。然后,在代码中,只需与该范围的.Address
属性进行比较,而不是像“$J$18”这样的值进行硬编码
以下是方法:
首先,定义单元J18的命名范围。我把它命名为“insert”,但你可以(几乎)随意命名它。只需确保在代码中更新对它的引用
如果您要根据正在更改的目标执行不同的操作,请使用类似的方法
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'This handles your original J17
If Target.Address = "$J$17" Then
For i = 1 To Target.Value
Cells(18, 9).EntireRow.Insert
Cells(18, 9).Value = i
Next i
End If
'This handles the new named range:
If Target.Address = Range("insert").Address Then
'Do something else, here:
MsgBox "Success!!"
End If
Application.EnableEvents = True
End Sub
如果您正在执行相同的插入和编号,那么我会想像这样:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Address = "$J$17" Or .Address = Range("insert").Address Then
For i = 1 To .Value
.Offset(1, -1).EntireRow.Insert
.Offset(1, -1).Value = i
Next i
End If
End With
Application.EnableEvents = True
End Sub
将$J$18中的单元格设置为命名范围,然后按名称引用它。这是动态的,并且随着工作表的更改而移动。