如何通过vba引用一个单元格
我只写了一些代码,它们从一个工作簿,工作表中选取值并将其粘贴到另一个工作簿,工作表中。 目前它作为值粘贴。 这里是我的代码的一些部分:
Do Until Cells(i, 9) = "Net Income" If Cells(i, 9) = "BONDS INTEREST EARNED" Then Bonds_IE = Cells(i + 1, 9)
然后用另一本书激活,
Cells(j - 5, 4) = Bonds_IE
我想把它作为参考来显示它从哪里获取信息。 例如:K:\ etc \ etc \ etc [etc.xlsx] etc!$ A $ 1
我觉得这应该是超级简单,但我不知道..请帮助:(谢谢!
你只需要引用单元格的.Formula
,而不是默认的,即.Value
。
Do Until Cells(i, 9) = "Net Income" If Cells(i, 9) = "BONDS INTEREST EARNED" Then Bonds_IE = Cells(i + 1, 9).Formula Cells(j - 5, 4).Formula = Bonds_IE
VBA代码含蓄地做了很多事情。 如果我们把一切都明确的话,这个问题就变得更加清楚
Do Until CStr(ActiveSheet.Cells(i, 9).Value) = "Net Income" If CStr(ActiveSheet.Cells(i, 9).Value) = "BONDS INTEREST EARNED" Then Bonds_IE = CStr(ActiveSheet.Cells(i + 1, 9).Value)
注意:
- 隐式string转换,用
CStr
明确表示。 如果单元格包含错误值,这些将会出现types不匹配错误。 您可能需要validationIsError
在给定单元格值之前是否返回False
。 -
隐式
ActiveSheet
引用。 如果您针对不涉及活动工作表的合格Range
调用使用这些错误,那么这些错误将会与运行时错误1004一起爆炸,例如:Sheet12.Range(Cells(i, 1), Cells(i + 1, 1)) = 42 'Sheet12 isn't active
-
隐式默认成员调用。
Cells
返回一个Range
对象; 其默认成员指向它的Value
。 这就是为什么你可以做Cells(j - 5, 4) = foo
5,4Cells(j - 5, 4) = foo
,仍然有可编译的代码。 让成员调用显式有助于更好地理解读取代码时发生了什么。
如前所述 , Range.Value
获取/设置范围的值 。 你想要的是它的。 .Formula
。
尝试使用源单元格的Address
来创build一个Formula
:
Dim Bonds_IE As String Do Until Cells(i, 9) = "Net Income" If Cells(i, 9) = "BONDS INTEREST EARNED" Then Bonds_IE = "=" & Cells(i + 1, 9).Address(RowAbsolute:=True, _ ColumnAbsolute:=True, _ External:=True) '... '... Cells(j - 5, 4).Formula = Bonds_IE
一个技巧与此虽然… Address(External:=True)
将不包括原始工作簿的path ,因此结果string需要作为Formula
应用于其他单元格,原始工作簿closures之前。 这样,当原始工作簿closures时,Excel将自动更新公式以包含path。