我正在尝试构建一个模块化表格,可以在令人作呕的工作表周围复制和粘贴。我正在使用一个宏来构建它,该宏将根据与触发宏的按钮相关的引用来执行任务(这将是表格的集成部分)。
范围的设定非常具有挑战性。我一直在使用下面的宏来测试相对于按钮的范围设置。所有变绿线路都不会触发。
X 是位置为 -1,-1 的单元格
A 是位于 (1,-1: 23,-1) 的范围
在下面的代码中,我首先尝试不选择按钮单元。
然后我尝试选择纽扣电池。
选择按钮单元格后,我使用了偏移函数和
offset.resize
选项。
我在这里找到了一些帖子,描述了相对于活动单元格的设置范围,但这些帖子总是包含该范围内的活动单元格,这对此不起作用,因为按钮需要清楚地清除数据。
由于所有这些尝试中的普遍因素是
Application.Caller
,这不是正确的短语吗?
Sub RelateiveBttn()
Dim Arange As Range, XRange As Range
'Set Arange = ActiveSheet.Shapes(Application.Caller).Range(Offset(1, -1)): ActiveSheet.Shapes(Application.Caller).Range (Offset(23, -1))
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
'Set XRange = Range(ActiveCell.Offset(-1, -1))
'Set Arange = ActiveCell.Offset(1, -1).Resize(23, 0)
'Set Arange = Range(ActiveCell.Offset(1, -1), ActiveCell.Offset(23, -1))
Arange.Select
XRange.Select
End Sub
假设
Sub RelateiveBttn()
被表单按钮调用,请参阅代码中的注释来解释所发生的情况:
Sub RelateiveBttn()
' get the Button
Dim shp As Shape
Set shp = Me.Shapes(Application.Caller)
' get the Range that the Button is in (top left cell of the range ... you can also do .BottomRightCell)
Dim rng As Range
Set rng = shp.TopLeftCell
' get a Range relative to the Button's top left cell
Dim rngRelativeToButton
Set rngRelativeToButton = rng.Offset(1, 1).Resize(2, 2)
' show it worked!
Debug.Print rngRelativeToButton.Address
End Sub
...这只会让您获得范围...不会移动任何东西