Excel 如何通过vba引用单元格

Excel 如何通过vba引用单元格,excel,vba,reference,Excel,Vba,Reference,我只是写了一些代码,从一个工作簿,工作表中提取值,然后粘贴到另一个工作簿,工作表中。当前它作为值粘贴。 以下是我的代码的一些部分: 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\et

我只是写了一些代码,从一个工作簿,工作表中提取值,然后粘贴到另一个工作簿,工作表中。当前它作为值粘贴。 以下是我的代码的一些部分:

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一美元

我觉得这应该非常简单,但我不确定。。 请帮助:(
谢谢!!

您只需要引用单元格的
.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

您只需要引用单元格的
.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)
注:

  • 隐式字符串转换,通过CStr显式进行。如果单元格包含错误值,这些转换将导致类型不匹配错误。在使用该值执行任何操作之前,您可能需要验证
    iError
    是否返回给定单元格值的
    False
  • 隐式
    ActiveSheet
    引用。如果对不引用活动工作表的限定
    Range
    调用使用这些引用,则会出现运行时错误1004,例如:

    Sheet12.Range(Cells(i, 1), Cells(i + 1, 1)) = 42 'Sheet12 isn't active
    
  • 隐式默认成员调用。
    单元格
    返回一个
    范围
    对象;其默认成员指向其
    。这就是为什么您可以执行
    单元格(j-5,4)=foo
    ,并且仍然具有可编译代码的原因。显式成员调用有助于更好地了解阅读代码时的实际情况


Range.Value
获取/设置范围的值。您需要的是它的
。公式

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)
注:

  • 隐式字符串转换,通过CStr显式进行。如果单元格包含错误值,这些转换将导致类型不匹配错误。在使用该值执行任何操作之前,您可能需要验证
    iError
    是否返回给定单元格值的
    False
  • 隐式
    ActiveSheet
    引用。如果对不引用活动工作表的限定
    Range
    调用使用这些引用,则会出现运行时错误1004,例如:

    Sheet12.Range(Cells(i, 1), Cells(i + 1, 1)) = 42 'Sheet12 isn't active
    
  • 隐式默认成员调用。
    单元格
    返回一个
    范围
    对象;其默认成员指向其
    。这就是为什么您可以执行
    单元格(j-5,4)=foo
    ,并且仍然具有可编译代码的原因。显式成员调用有助于更好地了解阅读代码时的实际情况


Range.Value
获取/设置范围的值。您需要的是它的
。公式

尝试使用源单元格的
地址
创建一个
公式

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

不过有一个技巧…
地址(外部:=True)
将不包括原始工作簿的路径,因此在关闭原始工作簿之前,需要将生成的字符串作为
公式应用到另一个单元格。这样,当原始工作簿关闭时,Excel将自动更新公式以包括路径。

尝试使用源单元格的
地址
创建
公式

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

不过有一个技巧…
地址(外部:=True)
将不包括原始工作簿的路径,因此在关闭原始工作簿之前,需要将生成的字符串作为
公式应用到另一个单元格。这样,当原始工作簿关闭时,Excel将自动更新公式以包括路径。

单元格
像这样使用,隐式地指代
活动表
是什么。在遇到其他问题之前,先用
工作表
对象实例对其进行限定。
单元格
像这样使用,隐式地指代
活动表
是什么。在y之前用
工作表
对象实例对其进行限定你遇到了其他问题。我尝试更改为。公式现在发生的是,而不是引用单元格,如=“[210303 to 2017 Yearend NEW.xlsm]210303 2017”!$I$199这是我想要的,它现在拉=A1*I199这是该单元格中的公式对不起,你要找的不太清楚(乘法运算从哪里来?你的帖子里没有).
.Formula
获取/设置一个字符串,该字符串表示用于计算范围的
.Value
的公式。您需要构建该字符串以使其成为所需的任何公式。或者您的意思是使一个单元格的值成为另一个单元格的公式吗?我有两个单元格。单元格A1和单元格B1位于两个不同的工作簿中。我想t单元格A1将是“=CellB1”。我只想将单元格A引用到单元格B。单元格B将在该工作表中有自己的计算。感谢您的帮助!然后您想使用
=
后跟CellB1的
Parent.Parent.FullName
(工作簿路径)“构建”单元格A1的
公式
字符串用方括号括起来,后面是
父项。名称
(工作表的名称)用单引号括起来,后面是感叹号,后面是CellB1的
地址
^^^,但使用起来更简单
地址(外部:=True)
我尝试将其更改为公式。现在发生的情况是,不再引用单元格,例如:[210303 to 2017 Yearend NEW.xlsm]210303 2017'!$I$199这是我想要的,现在它拉着=A1*I199,这是那个单元格中的一个公式对不起,你要找的东西不太清楚(乘法从哪里来?你的帖子里什么都没有)。
.formula
获取/设置一个表示u的公式的字符串