使用 VBA 在公式 SUMIFS 中的另一个工作簿中引用变量工作表
Reference variable worksheet in another workbook in formula SUMIFS using VBA
我正在尝试将 SUMIFS 公式添加到单元格,因此我需要有引用另一个工作簿中另一个 sheet 的变量。但是,这在我的代码中不起作用。仅供参考,我已经用 msoFileDialogFilePicker
打开了工作簿。
这里是我要加公式的部分,ws是工作对象sheet:
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:$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])"
我在网上搜索了很多这样做的例子,这个是我从 那里得到的
这个 post,我发现它与我的情况相似。但是,它似乎仍然无法正常工作,程序提示我从工作簿中找到 select sheets 并说找不到工作 sheet ws.name
。在我 select 工作 sheet 之后,单元格中的公式如下所示:=SUMIFS('[&ws.name&]ASEAN (EUR)'!R[32]C[3]:R[243]C[3],'[&ws.name&]ASEAN (EUR)'!C[2], C[-1])
。
请帮我定位问题,提前致谢!
可能您在 join/concat 字符串中有错误...
如果您 join/concat 需要使用 & 的字符串。例如:
sheetname = "mysheet"
Range("D5").FormulaR1C1 = "=SUM(" & sheetname & "!C[-2])"
两件事
- 你指的是哪个 sheet
Set rng = Range("C2:C" & usedRow2)
- SumIfs() 语法是
=SUMIFS(Sum_range,Criteria_range1,Criteria1 ....)
。
- 将 SUMIFS() 与外部工作簿一起使用时,公式如下所示
"=SUMIFS('[" & wb.Name & "]" & ws.Name & "'!" & YOUR_SUM_RANGE & ",'[" & wb.Name & "]" & ws.Name & "'!" & YOUR_CRITERIA_RANGE & "," & YOUR_CRITERIA & ")"
您只使用了工作sheet 名称,而不是工作簿名称。
我的建议:手动打开工作簿输入公式(还是手动)。检查公式是否有效,然后在您的代码中使用该公式
我正在尝试将 SUMIFS 公式添加到单元格,因此我需要有引用另一个工作簿中另一个 sheet 的变量。但是,这在我的代码中不起作用。仅供参考,我已经用 msoFileDialogFilePicker
打开了工作簿。
这里是我要加公式的部分,ws是工作对象sheet:
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:$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])"
我在网上搜索了很多这样做的例子,这个是我从 那里得到的
这个 post,我发现它与我的情况相似。但是,它似乎仍然无法正常工作,程序提示我从工作簿中找到 select sheets 并说找不到工作 sheet ws.name
。在我 select 工作 sheet 之后,单元格中的公式如下所示:=SUMIFS('[&ws.name&]ASEAN (EUR)'!R[32]C[3]:R[243]C[3],'[&ws.name&]ASEAN (EUR)'!C[2], C[-1])
。
请帮我定位问题,提前致谢!
可能您在 join/concat 字符串中有错误...
如果您 join/concat 需要使用 & 的字符串。例如:
sheetname = "mysheet"
Range("D5").FormulaR1C1 = "=SUM(" & sheetname & "!C[-2])"
两件事
- 你指的是哪个 sheet
Set rng = Range("C2:C" & usedRow2)
- SumIfs() 语法是
=SUMIFS(Sum_range,Criteria_range1,Criteria1 ....)
。 - 将 SUMIFS() 与外部工作簿一起使用时,公式如下所示
"=SUMIFS('[" & wb.Name & "]" & ws.Name & "'!" & YOUR_SUM_RANGE & ",'[" & wb.Name & "]" & ws.Name & "'!" & YOUR_CRITERIA_RANGE & "," & YOUR_CRITERIA & ")"
您只使用了工作sheet 名称,而不是工作簿名称。
我的建议:手动打开工作簿输入公式(还是手动)。检查公式是否有效,然后在您的代码中使用该公式