我正在尝试确定如何让用户插入列和/或行,而不会影响宏中的其余代码。
为我的对象定义名称并在VBA中使用r1c1引用似乎没有帮助,因为这些插入的列也会移动这些引用和名称。
我错过了一些应该完全明显的东西吗? 或者我正在努力实现的目标是不可能的?
UPDATE:当我在excel中命名一个范围(没有VBA)时,所有内容似乎都可以正常插入列。但是,当我用VBA命名范围时,一切都会混乱。以下是一些可以使用的代码示例。
当运行以下代码时...我无法插入列,因为我的MSGBOX没有意识到指定的单元格已向右移动。但是,如果我要删除此代码中的第一行,只需命名单元格" GanttStartLocation"在代码中引用...这似乎工作正常。
为什么当VBA被认为不适用时?
ActiveWorkbook.Names.Add Name:="DEFINENAMETEST", RefersToR1C1:="=Sheet1!R10C14"
Dim rGanttLocation As Range 'Range used to define where the Gantt chart begins
Dim iFirstRowGantt As Integer 'Defines the first row of the Gantt chart based on rGanttLocation
Dim iFirstColumnGantt As Integer 'Defines the first column of the Gantt chart based on rGanttLocation
'Set rGanttLocation = Worksheets(1).Range("GanttStartLocation")
Set rGanttLocation = Worksheets(1).Range("DEFINENAMETEST")
iFirstRowGantt = rGanttLocation.Row
iFirstColumnGantt = rGanttLocation.Column
MsgBox (iFirstRowGantt)
MsgBox (iFirstColumnGantt)
答案 0 :(得分:0)
为单元格使用命名范围,以便在范围内添加行/列时,添加行/列不太可能影响代码。例如:如果调用D1-F10
testrange
,则执行以下子例程将为该范围提供红色背景颜色
Public Sub Test()
Range("testrange").Interior.Color = vbRed
End Sub
如果将新行和列添加到此范围,并且在用vbYellow替换vbRed后重新执行子例程,则整个范围(使用新列和行)将变为黄色。
在指定范围之外,根据我的理解,保持宏的通用性需要花费大量的工作。