如何通过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,4 Cells(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。