【问题标题】:Reference variable worksheet in another workbook in formula SUMIFS using VBA使用 VBA 在公式 SUMIFS 中的另一个工作簿中引用变量工作表
【发布时间】:2017-05-31 03:07:56
【问题描述】:

我正在尝试向单元格添加一个 SUMIFS 公式,因此我需要有一个变量来引用另一个工作簿中的另一个工作表。但是,这在我的代码中不起作用。仅供参考,我已经用msoFileDialogFilePicker 打开了工作簿。

这是我必须添加公式的部分,ws 是工作表的对象:

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
    .Title = "..."
    .AllowMultiSelect = False

    If .Show = True Then
        If .SelectedItems(1) <> vbNullString Then
            Filename = .SelectedItems(1)
        End If
    Else
        Exit Sub
    End If
    Set wb = GetObject(Filename)
    Set ws = wb.Sheets("ASEAN (EUR)")

    With ws
        YTDws.Range("$A$1:$D$" & usedRow).AutoFilter Field:=1, Criteria1:="Singapore"
        If .Range("Q20").Value = "SINGAPORE" Then
        usedRow2 = YTDws.Cells(Rows.Count, 1).End(xlUp).Row
        Set rng = Range("C2:C" & usedRow2)
        For Each cl In rng.SpecialCells(xlCellTypeVisible)
            cl.Select
            cl.FormulaR1C1 = "=SUMIFS('&ws.name&'!R[32]C[3]:R[243]C[3],'&ws.name&'!C[2], C[-1])"
        Next cl
        End If
    End With

End With

我认为问题出在这行代码上:

cl.FormulaR1C1 = "=SUMIFS('&ws.name&'!R[32]C[3]:R[243]C[3],'&ws.name&'!C[2], C[-1])"

我在网上搜索了很多做的例子,这个是我从 this post 得到的,我发现它和我的情况相似。但是,它似乎仍然无法正常工作,程序提示我从工作簿中选择工作表并说它找不到工作表ws.name。选择工作表后,单元格中的公式如下所示:=SUMIFS('[&amp;ws.name&amp;]ASEAN (EUR)'!R[32]C[3]:R[243]C[3],'[&amp;ws.name&amp;]ASEAN (EUR)'!C[2], C[-1])

请帮我定位问题,先谢谢了!

【问题讨论】:

  • 刚刚用这个cl.Formula = "=SUMIFS('" &amp; ws.Name &amp; "'! R[32]C[3] : R[243]C[3],'" &amp; ws.Name &amp; "'!R[33]C[2], C[-1]" 解决了它。关键是要有空格和引号。

标签: vba excel excel-formula sumifs


【解决方案1】:

几件事

  1. 你在这里指的是哪张表Set rng = Range("C2:C" &amp; usedRow2)
  2. SumIfs() 语法为 =SUMIFS(Sum_range,Criteria_range1,Criteria1 ....)
  3. 将 SUMIFS() 与外部工作簿一起使用时,公式如下所示

"=SUMIFS('[" &amp; wb.Name &amp; "]" &amp; ws.Name &amp; "'!" &amp; YOUR_SUM_RANGE &amp; ",'[" &amp; wb.Name &amp; "]" &amp; ws.Name &amp; "'!" &amp; YOUR_CRITERIA_RANGE &amp; "," &amp; YOUR_CRITERIA &amp; ")"

您只使用工作表名称而不是工作簿名称。

我的建议:手动打开工作簿并输入公式(再次手动)。检查公式是否有效,然后在您的代码中使用该公式

【讨论】:

  • 感谢您的帮助! Set ws = wb.Sheets("ASEAN (EUR)")我的worksheet变量中包含了我引用的workbook,所以我觉得不用再在公式中添加workbook了,对吗?
  • 您必须这样做,但如果您将公式放在具有工作表的同一个工作簿中,那么您不需要工作簿名称。
【解决方案2】:

可能你在连接/连接字符串中有错误...

如果你加入/连接字符串,你需要使用 &。例如:

sheetname = "mysheet"
Range("D5").FormulaR1C1 = "=SUM(" & sheetname & "!C[-2])"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2013-08-16
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多