应用场景
不打开工作薄直接取值
知识要点
1:VBA中没有不打开工作薄而取其工作表数据的方法,但excel的公式却可以完成
2:提供正确的路径和区域地址即可。所以本例借用公式获取数据,在将公式转换成值,从而实现不打开工作薄也可以取值
3:只能取其数值,而不能引用其单元格格式和该区域中的图形对象,如果需要引用格式或者图形对象、图标等,那么必须打开工作
4:Range.FormulaArray 属性 返回或设置区域的数组公式
Sub 取值(路径 As String, 文件 As String, 工作表, 单元格 As String)
On Error Resume Next
Dim Rng As Range
'对变量rng赋值,等于活动单元格为参照原点并扩展其高度、宽度与参数单元格一致的区域
Set Rng = ActiveSheet.Resize(Range(单元格).Rows.Count, Range(单元格).Columns.Count)
If Err <> 0 Then
MsgBox "请调整区域,当前区域不足以存放引用区域的值" & Chr(10) & "建议选择A1在执行程序", 64, "提示"
Exit Sub
End If
'将目标区域复制到以当前表活动单元格为左上角的相同大小的区域中
With ActiveCell.Resize(Range(单元格).Rows.Count, Range(单元格).Columns.Count)
'在指定区域输入公式,该公式引用指定路径下的工作表数据,可以是单元格也可以是区域
.FormulaArray = "='" & 路径 & "\[" & 文件 & "]" & 工作表 & "'!" & 单元格
'将公式转换为值
.Value = .Value
End With
End Sub
Sub 不打开工作薄取销售统计()
'调用sub过程,指定参数
取值 ThisWorkbook.Path & "/2017销售", "7月销售.xls", "长江路店", "A1:B9"
End Sub