我有使用Target.Address基于单元格J17中的单元格值插入行的代码。我想在它下面的行上使用类似的代码;但是,它下面的行的位置取决于添加的行数。 有没有人知道将迭代次数添加到地址行的方法? 我知道如何使用Cells函数执行此操作,但我喜欢自动运行Target.Address
这是我的代码:
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
End Sub
答案 0 :(得分:0)
有没有人知道将迭代次数添加到地址行的方法?
不确定。那部分是基本的。您可以使用Offset
方法计算范围的新地址。但是你需要把它存放在某个地方。您可以创建CustomDocumentProperty
,隐藏工作表或命名范围变量。所有这些都可以正常工作。
但最好的解决方案可能只是将该单元格最初定义为命名范围。命名范围很整洁,因为它们是动态的。如果插入行/列或删除行/列,Name
将随单元格一起移动。然后,在您的代码中,只需与该范围的.Address
属性进行比较,而不是像" $ J $ 18"这样的值进行硬编码。
以下是:
首先,为单元格J18定义命名范围。我把它命名为#34;插入",但你可以命名(几乎)你想要的任何东西。只需确保在代码中更新对它的引用。
如果您打算执行不同的操作,请使用类似的内容,具体取决于哪个目标正在发生变化。
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