使用VBA将公式插入具有表引用的单元格

使用VBA将公式插入具有表引用的单元格,vba,excel,Vba,Excel,我试图在单元格中插入公式,以便将MsgBox函数捕获的变量插入公式中 TmpPT = "=IF(NOT(ISBLANK(INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * """ & prjNum & """ * "" ," & "Table10[Project Name]" & ",0)))),INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * "

我试图在单元格中插入公式,以便将MsgBox函数捕获的变量插入公式中

TmpPT = "=IF(NOT(ISBLANK(INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * """ & prjNum & """ * "" ," & "Table10[Project Name]" & ",0)))),INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * """ & prjNum & """ * ""," & "Table10[Project Name]" & ",0))," & "Not Yet Received" & ")"
下面代码的总体目标是取消隐藏另一个工作表,并将数据插入该工作表中的某个范围。如果不相关,请忽略这些信息

Private Sub CommandButton1_Click()
Dim SetPT As Variant
Dim TmpStg As Variant
Dim r As Integer
Dim c As Integer
Dim prjNum As Variant
Dim titlerng As Range
Dim outptrng As Range

r = 0
c = 0

SetPT = "A1"

Sheets("MG Rpt").Visible = True
Sheets("MG Rpt").Activate
ActiveSheet.Range(SetPT).Select

r = 8
ActiveCell.Offset(r, c).Activate
ActiveCell.Value = "Project #:"
ActiveCell.Offset(1, c).Activate
ActiveCell.Value = "Received Date:"
ActiveCell.Offset(1, c).Activate
ActiveCell.Value = "Elapsed Time:"
ActiveCell.Offset(1, c).Activate
ActiveCell.Value = "Expected Completion:"
ActiveCell.Offset(1, c).Activate
ActiveCell.Value = "Feedback:"

prjNum = InputBox("Please enter the Project # you are requesting down below.", "Project Search Query")
ActiveCell.Offset(-4, 1).Value = prjNum
ActiveCell.Offset(-4, 0).Activate
TmpStg = "=IF(NOT(ISBLANK(INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * """ & prjNum & """ * "" ," & "Table10[Project Name]" & ",0)))),INDEX(" & "Table10[Recvd Date]" & ",MATCH("" * """ & prjNum & """ * ""," & "Table10[Project Name]" & ",0))," & "Not Yet Received" & ")"

Range("B10").Formula = TmpPT

End Sub
我是否丢失了一个对象或无法格式化一行?边走边学VBA:)

公式应如下所示:

=IF(NOT(ISBLANK(INDEX(Table10[Recvd Date],MATCH("*"&prjNum&"*",Table10[Project Name],0)))),INDEX(Table10[Recvd Date],MATCH("*"&prjNum&"*",Table10[Project Name],0)),"Not Yet Received")
解决方案:

明白了!以下是使其工作的最终输出:

TmpStg = "=IF(NOT(ISBLANK(INDEX(Table10[Recvd Date],MATCH(""*""&" & prjNum & "&""*"",Table10[Project Name],0)))),INDEX(Table10[Recvd Date],MATCH(""*""&" & prjNum & "&""*"",Table10[Project Name],0)),""Not Yet Received"")"
谢谢大家的帮助

尝试将字符串连接最小化到绝对必要的程度

Option Explicit

Private Sub CommandButton1_Click()
    Dim tmpStg As Variant, prjNum As Variant

    prjNum = InputBox("Please enter the Project # you are requesting down below.", "Project Search Query")
    tmpStg = "=IF(LEN(INDEX(Table10[Recvd Date], MATCH(""*" & prjNum & "*"", Table10[Project Name], 0))), " & _
                             "INDEX(Table10[Recvd Date], MATCH(""*" & prjNum & "*"", Table10[Project Name], 0)), ""Not Yet Received"")"

    Debug.Print tmpStg

    With Worksheets("MG Rpt")
        .Visible = True

        .Cells(9, "A").Resize(5, 1) = _
          Application.Transpose(Array("Project #:", "Received Date:", "Elapsed Time:", _
                                      "Expected Completion:", "Feedback:"))

        .Cells(9, "B") = prjNum
        .Cells(10, "B").Formula = tmpStg
        .Cells(10, "B").NumberFormat = "mm/dd/yyyy"

        .Activate
    End With

End Sub

您真的需要在项目编号中加上通配符吗?

”&prjNum&“
更改为
”&prjNum&“
”&prjNum&“&”&“
我已将“&prjNum&”更改为两个选项,它只返回到ActiveCell。公式未插入到单元格中。我错过什么了吗@ScottCranerand
,“&”尚未收到“&“
,”尚未收到“)”
但最简单的方法是向我们展示它应该是什么样子。谢谢,@Jeeped它应该是这样的“=如果(不是空的(索引(表10[Recvd Date],匹配(“&prjNum&”,表10[Project Name],0))),索引(表10[Recvd Date],匹配(“&prjNum&”),表10[项目名称],0],“尚未收到”)'请编辑您的问题,将公式原型包含在代码块中(即,左侧有4个空格)。谢谢,@Jeeped!不知道我可以执行多个方法。很遗憾,是的,函数查找的数组是字母数字数组。