【问题标题】:How to use cell contents as inputs for range formulas in Excel VBA?如何使用单元格内容作为 Excel VBA 中范围公式的输入?
【发布时间】:2019-06-21 12:51:59
【问题描述】:

Excel VBA 范围公式类似于 Sheet2.Range("A1").value。 例如,您可以参考此地址并更改该单元格中的值。 现在我正在寻找的是通过使用两个单元格的内容来构建这个公式;一个单元格显示“Sheet2”,另一个显示“A1”。如何在公式中引用这两个单元格以使其工作方式相同?

我尝试了各种暗淡,现在最终没有出现错误,但没有达到预期的结果。当前公式仅返回 "Sheet2.Range("A1").value 而不是其内容。

Sub AddressInCells()
    'This is just for one reference. In reailty there is a table of references to loop through.
    'For this example cell A1 in Sheet2 = "Text to take to sheet1"

    Dim SheetSel As String
    Dim CellSel As String
    Dim ReferSel As String

    With Sheet1

        SheetSel = Cells(1, 1).Value
        CellSel = Cells(1, 2).Value

        ReferSel = SheetSel & ".range(" & Chr(34) & CellSel & Chr(34) & ").value"

        MsgBox ReferSel

        Sheet1.Range("D1").Value = ReferSel 'Results in "Sheet2.range("A1").value
        Sheet1.Range("D2").Value = Sheet2.Range("A1").Value 'Results in Text to take to sheet1'

    End With

End Sub

预期结果是该公式以“通常”的方式工作。它现在只返回一个字符串。

【问题讨论】:

  • Sheet1.Range("D1").Value = Sheet1.Range("A1") & Sheet1.Range("B1") 就这么简单。
  • 如果您尝试构建公式字符串,则需要构建公式字符串,例如"='Sheet Name'!$A$1"。所以,像ReferSel = "='" & SheetSel "'!" & CellSel & """

标签: excel vba


【解决方案1】:

我相信,而不是你想这样做:

ReferSel = Sheets(SheetSel).range(CellSel).value

【讨论】:

  • 谢谢,这确实有效,除非工作表名称已更改。然后你会得到一个超出范围的错误。我一直在寻找的是使用工作表编号(不是索引号,因为如果您移动工作表,它可能会改变),因为这似乎是用户无法更改的。
【解决方案2】:

你可以试试:

Option Explicit

Sub test()

    Dim ws As Worksheet
    Dim rng As Range

    'With statement where the data are store. Change name if needed
    With ThisWorkbook.Worksheets("Sheet1")
        Set ws = ThisWorkbook.Worksheets(.Range("A1").Value)
        Set rng = ws.Range(.Range("A2").Value)
    End With

    Debug.Print rng.Address
    Debug.Print rng.Worksheet.Name

End Sub

【讨论】:

  • 感谢您的帮助,这表明只要您使用工作表名称(只要名称未更改,就可以与工作表编号相同),它就可以正常工作。我正在寻找一种使用工作表编号的方法。
  • Sheetnumber 是什么意思?你是说工作表索引吗?
  • 没有非工作表索引;使用 sheetnumber 是指输入 .codename 时获得的字符串。当您输入 .index 时,您将获得工作表索引。因此,如果您有一个带有 3 张表格的新 Excel 表格,并且您将 Sheet3 重命名为 Start 并将其从右侧移到中间:Sheetindex 会给您 2,Sheetncodename) 会给您 Sheet3(这就是我所说的表格编号) .
【解决方案3】:

您正在尝试构建遵循此约定的公式字符串:

'<sheet name>!'<address>

仅当工作表名称包含空格时,单引号才严格必需,因此这是一个有效的公式:

=Sheet1!$A$1

但始终包含它们只是一个好习惯,因此,您需要根据这些单元格中的值构建字符串:

' offset the sheet name in single quotes, separate the sheet & address with !
ReferSel = "='" & SheetSel "'!" & CellSel

Sheet1.Range("D1").Formula = ReferSel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-16
    • 2022-12-03
    • 1970-01-01
    • 2017-04-24
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多