使用VBA在公式SUMIFS中的另一个工作簿中引用变量工作表

时间:2017-05-31 03:07:57

标签: vba excel-vba excel-formula sumifs excel

我正在尝试向单元格添加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('[&ws.name&]ASEAN (EUR)'!R[32]C[3]:R[243]C[3],'[&ws.name&]ASEAN (EUR)'!C[2], C[-1])

请提前帮助我找到问题所在!

2 个答案:

答案 0 :(得分:3)

一些事情

  1. 您在这里引用的是哪个表格Set rng = Range("C2:C" & usedRow2)
  2. SumIfs()语法为=SUMIFS(Sum_range,Criteria_range1,Criteria1 ....)
  3. 将SUMIFS()与外部工作簿一起使用时,公式如下所示
  4. "=SUMIFS('[" & wb.Name & "]" & ws.Name & "'!" & YOUR_SUM_RANGE & ",'[" & wb.Name & "]" & ws.Name & "'!" & YOUR_CRITERIA_RANGE & "," & YOUR_CRITERIA & ")"

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

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

答案 1 :(得分:0)

可能你在join / concat string中有错误......

如果您加入/连接字符串,则需要使用&amp ;.例如:

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