在Excel中添加新行而不会破坏使用Range.Value的vbamacros
我已经在VBA中写了一个macros,它只是填充表单中另一个单元格的给定单元格的值。 我在表单中为这个单元格做了很多工作,我这样做:
Range("B3").Value = Range("B200") Range("B4").Value = Range("B201") 'etc.
现在,我经常通过插入新行来添加值,所以我可能会在B200和B201之间插入一个新行,这会破坏macros,因为在插入新行时它不会自动更新。
我如何编码macros,以便在插入新的行或列时自动调整单元格引用?
我的build议是确保你想要检索值的ROW具有唯一的值,你可以在任何时候findFININD,然后从find的单元格的行的B列中获取你的值。 所以现在你想在B200中获得价值,A200总是有文字: “最终总计” ,这是独一无二的。
Dim MyRNG As Range Set MyRNG = Range("A:A").Find("Final Total", LookIn:=xlValues, LookAt:=xlWhole) Range("B3").Value = Range("B" & MyRNG.Row) Range("B4").Value = Range("B" & MyRNG.Row + 1)
这不是一个答案,而是一个select。
命名你的范围是Shiinbuild议的方式,但是如果你有500个单元格,就像我之前提到的那样,命名500个单元格并在你的代码中使用它们可能是非常痛苦的。 另一种方法是使用智能代码。 我们来举个例子
假设你有这样的代码
Sub Sample() Range("B3").Value = Range("B200") Range("B4").Value = Range("B201") Range("B5").Value = Range("B201") ' And ' So On ' till Range("B500").Value = Range("B697") End Sub
编写这段代码的最好方法就是这样
Sub Sample() Dim i As Long For i = 200 To 697 Range("B" & i - 197).Value = Range("B" & i) Next i End Sub
并说如果你说在第300行插入一行,然后简单地把上面的代码分成两部分
Sub Sample() Dim i As Long For i = 200 To 299 Range("B" & i - 197).Value = Range("B" & i) Next i For i = 301 To 698 Range("B" & i - 197).Value = Range("B" & i) Next i End Sub
所以每次插入一行时,只要将for循环分解为一个额外的部分即可。 这看起来很乏味,但比命名500单元格并在代码中使用它们要好得多。
如果您打算只使用一次macros(即1次使用),请继续阅读 。
如果您担心用户插入行后单元格不会更新,则您可以不指定值,而是指定一个公式。
例如
Range("B3").Formula = "=B200"
这将在B3
单元格中input公式=B200
。 所以下次当您插入一行以便第200行移动它的位置时,您会注意到公式在B3
单元格中自动更新
HTH
尝试给范围命名。 如果您按名称引用该范围,则Excel会search它并检索定义它的行。 范围名称在添加新行时更新其定义。
除了上面的内容,我认为这个教程说明了我的观点: http : //www.homeandlearn.co.uk/excel2007/excel2007s7p6.html这是如何定义范围的名称。
本教程介绍了如何在macros和vba上使用它: http : //excel.tips.net/T003106_Using_Named_Ranges_in_a_Macro.html
我希望这有助于:D