如何在Excel VBA中使用单元格内容作为范围公式的输入?

时间:2019-06-21 12:51:59

标签: excel vba

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

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

3 个答案:

答案 0 :(得分:0)

我相信,相反,您想这样做:

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

答案 1 :(得分:0)

您可以尝试:

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

答案 2 :(得分:0)

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

'<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