问题很简单。我在带有交叉命令的工作表的更改事件中有一些代码。我在工作表上还有一个按钮,单击该按钮时将一系列单元格(为其写入更改事件中的代码)复制到该位置。同一张纸。
问题是如何让更改事件的代码适用于刚粘贴按钮宏的新范围。
编辑:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C6:C30")) Is Nothing Then
UnprotectSheet ActiveSheet
If Not Target.Value = "" Then
Target.Offset(0, -1).Value = Now()
Else
Target.Offset(0, -1).ClearContents
End If
ProtectSheet ActiveSheet
End If
End Sub
按钮代码:
Sub Macro()
Range("B3:F3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("N3").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
答案 0 :(得分:0)
我建议始终将按钮中新复制的范围添加到命名范围(本例中为"MyName"
),然后使用Worksheet_Change
中的命名范围与:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("MyName")) Is Nothing Then
使用按钮宏中的Test
程序之类的内容将新复制的范围添加到指定范围。
Public Sub Test()
AddRangeToNamedRange "MyName", Selection 'instead of selection better specify a range
'like Range("A1:C5")
Debug.Print Range("MyName").Address 'shows which addresses are represented by the named range MyName
End Sub
'**
'* Adds a new range to an existing named range.
'* If the named range does not exist yet it adds a named range with the
'* given range name and the given range.
'*
Public Sub AddRangeToNamedRange(RangeName As String, AddNewRange As Range)
Dim NamedRange As Range
On Error GoTo NameDoesNotExists
Set NamedRange = Range(RangeName) 'throws error if name does not exists
On Error GoTo 0
'add new range to the named range
ThisWorkbook.Names(RangeName).RefersTo = Union(NamedRange, AddNewRange)
Exit Sub
NameDoesNotExists:
Err.Clear
ThisWorkbook.Names.Add RangeName, AddNewRange 'add the name (first time)
End Sub
这样Range("MyName")
始终表示使用按钮复制的所有复制范围。