不打开工作簿取值
- 格式:xlsx
- 大小:9.55 KB
- 文档页数:2


示例03-26:判断工作簿是否存在 Sub testFileExists()MsgBox "如果文件不存在则用信息框说明,否则打开该文件." If Not FileExists("C:\文件夹\子文件夹\文件.xls") Then MsgBox "这个工作簿不存在!" ElseWorkbooks.Open "C:\文件夹\子文件夹\文件.xls" End If End Sub‘- - - - - - - - - - - - - - - - - - - - - - -Function FileExists(FullFileName As String) As Boolean '如果工作簿存在,则返回TrueFileExists = Len(Dir(FullFileName)) > 0 End Function示例说明:本示例使用自定义函数FileExists判断工作簿是否存在,若该工作簿已存在,则打开它。
代码中,“C:\文件夹\子文件夹\文件.xls”代表工作簿所在的文件夹名、子文件夹名和工作簿文件名示例03-27:判断工作簿是否已打开[示例03-27-01]Sub testWorkbookOpen()MsgBox "如果工作簿未打开,则打开该工作簿." If Not WorkbookOpen("工作簿名.xls") Then Workbooks.Open "工作簿名.xls" End If End Sub‘- - - - - - - - - - - - - - - - - - - - - - -Function WorkbookOpen(WorkBookName As String) As Boolean '如果该工作簿已打开则返回真 WorkbookOpen = FalseOn Error GoTo WorkBookNotOpenIf Len(Application.Workbooks(WorkBookName).Name) > 0 Then WorkbookOpen = TrueMsgBox "该工作簿已打开" Exit Function End IfWorkBookNotOpen: End Function示例说明:本示例中的函数WorkbookOpen用来判断工作簿是否打开。
excel数据处理:快速提取多工作簿数据本文分享excel多个工作簿查询数据提取汇总方法,使用到Power Query插件来完成Excel不同工作簿数据汇总.小王所在的公司在全国各地都有分部,每到年底小王都很头疼。
各个地区的销售数据需要汇总,尽管工作簿模板一致,但是全国那么多城市,工作簿也要逐一打开复制粘贴数据。
工作簿容量有的大有的小,一个个打开要花费大量的时间。
那有没有什么好方法可以不用打开工作簿直接提取数据呢?今天给大家介绍了两种方法来实现。
如图,在桌面这个文件夹中举例说明了五个城市的12个月的销售数据。
其中每个工作簿在“销售额”工作表下存储的是该城市1-12月的数据,现在要不打开工作簿批量提取各个城市12月份的合计值,也就是“销售额”工作表C14单元格的值。
一、设置引用公式法提取1.在该文件夹下,新建一个记事本,输入代码dir *.xlsx /b >1.txt ,保存类型选择“所有文件”,另存为bat文件。
2.双击新建好的bat文件,该文件夹就会生成1.txt文件,打开文件就能看到当前文件夹下的所有xlsx文件的文件名。
通过这种方式我们就获取到了该文件夹所有的工作簿名称。
3.新建一个工作簿用来存储提取到的数据。
如下图所示,把获取到的工作簿名称输入A列,现在要把各个工作簿C14的值放入对应的B列。
在B1单元格列输入="''C:\Users\Administrator\Desktop\销售\["&A1&"]销售额''!C14" ,在单元格显示为''C:\Users\Administrator\Desktop\销售\[北京.xlsx]销售额''!C14 ,也就是文件夹下“北京”工作簿的“销售额”工作表的C14单元格,然后下拉填充。
4.选中B列复制然后粘贴为值5.按住Ctrl+H,打开“查找和替换”窗口,把 ''C 替换成 =''C ,点击“全部替换”。
使用Vba读取已关闭的Excel工作薄数据到当前工作表单元格之简单范例范例环境:在F:\盘根目录下,存在一工作薄,名称为“成绩表.xls”,其对应的路径是:“F:\成绩表.xls”;该工作薄第一个工作表名称是:Sheet1,里面存放的是学生期末考试成绩,其中,E列从E3开始,就是学生的考试成绩;下面我们要实现的是,在关闭F:\成绩表.xls情况下,打开Excel软件,新建一工作薄,在其工作表中的指定单元格,读取F:\成绩表.xls中的指定的成绩数据进行填充;①:在新建的工作表中直接按下组合键:Alt+F11,打开Microsoft Visual Basic窗口;如果打开的窗口没有出现代码窗口,那么,请在当前窗口执行操作:“视图”→“代码窗口”;②:在代码窗口中输入如下的代码:Private Function GetValue(path, filename, sheet, ref)' 从关闭的工作薄返回值Dim MyPath As String'确定文件是否存在If Right(path, 1) <> "\" Then path = path & "\"If Dir(path & filename) = "" ThenGetValue = "无法找到指定的Excel文件"Exit FunctionEnd If'创建公式MyPath = "'" & path & "[" & filename & "]" & sheet & "'!" &Range(ref).Range("A1").Address(, , xlR1C1)'执行EXCEL4宏函数GetValue = Application._executeExcel4Macro(MyPath)End Function'函数参数说明'-----------------------------------------------------------------'path:文件路径'filename:文件名称'sheet:工作表名称'ref:单元格区域'-----------------------------------------------------------------Sub GetCloseXlsValue()Range("C3").Value = GetValue("F:\", "成绩表.xls", "Sheet1", "E8")End Sub如下图:上述代码的功能是:读取F:\成绩表.xls中E8单元格的数据填充到当前EXCEL的C3单元格中;上述代码的诠释已做说明,不再阐述!之后直接按下F5运行代码,或点击代码运行按钮执行代码的操作,返回EXCEL窗口,即可看到填充效果;知识扩展:如何对关闭的工作薄数据进行求和再填充到当前工作表?可将Range("C3").Value = GetValue("F:\", "成绩表.xls", "Sheet1", "E8")改为:Range("C3").Value = GetValue("F:\", "成绩表.xls", "Sheet1", "E8")+GetValue("F:\", "成绩表.xls", "Sheet1", "E9")+ GetValue("F:\", "成绩表.xls", "Sheet1", "E10")这样,对E8,E9,E10三个单元格进行相加求和之后,再填充过来;如果想填充其他单元格数据到当前工作表的其他单元格,只需要修改来处即可:①:Range("C3").Value ,修改C3②:GetValue("F:\", "成绩表.xls", "Sheet1", "E8"),修改盘符,文件名,工作表名,E8单元格如果想使用更智能的办法,必须使用循环语句来控制,本例暂且不作介绍;Excel不打开工作薄读取数据另一示例程序设计相关2009-04-24 08:46:41 阅读100 评论0 字号:大中小Private Sub CommandButton1_Click() '导入其他料单统计表数据On Error Resume Nextaa = "要从第" & asrd & " 行开始导入数据吗?" & vbLf & vbLfaa = aa & "本操作的过程如下:" & vbLfaa = aa & "第1步导入用料数据;" & vbLfaa = aa & "第2步导入定位符数据;" & vbLfaa = aa & "第3步导入材料数据." & vbLfv = MsgBox(aa, 65, "导入数据")If v = 1 Thenfiletoopen = Application.GetOpenFilename("Excel97~2003 (*.xls), *.xls,Excel2007 (*.xlsx), *.xlsx", , "选择要导入数据的料单统计表") '得到导入数据文件路径If filetoopen = ActiveWorkbook.FullName Then '如果导入自身就停止导入操作v = MsgBox("不能导入自身数据", 64, "文件选择错误")Exit SubEnd IfIf filetoopen = False Then '如果没有选择文件就停止导入操作v = MsgBox("没有选择文件,终止本次数据导入操作", 64, "文件选择错误")Exit SubEnd Ifi = Len(filetoopen) '得到导入数据文件名While Mid(filetoopen, i, 1) <> "\"If Mid(filetoopen, i, 1) = " " Thenv = MsgBox("文件名不能包含空格", 64, "文件名错误") '文件名包含空格就退出Exit SubEnd Ifi = i - 1Wendwenjianming = Right(filetoopen, Len(filetoopen) - i)va1 = 0 '导入的用料数据行数va2 = 0 '导入的定位符个数va3 = 0 '导入的材料个数n1 = 0 '空行记录n2 = 0 '是否记录空行数n = 2 '导入数据表的操作行数k1 = asrd '导入数据开始放入的行数k2 = asrd + 1v = MsgBox("1、导入用料数据", 36, "数据导入操作开始")If v = 7 Then GoTo rt_1Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & 1While Worksheets("用料录入").Cells(asrd, 2).Value <> "begin"If Worksheets("用料录入").Cells(asrd, 2).Value = "over" Then Exit SubFor i = 1 To 6Worksheets("用料录入").Cells(k1 + n - 1, i).Value = ""Nextn = n + 1If n > 50 Thena1 = "数据源数据有误,是否继续执行下一步导入操作?" & vbLf & vbLfa1 = a1 & " '是' 继续导入操作." & vbLfa1 = a1 & " '否' 终止导入操作." & vbLfv = MsgBox(a1, 36, "数据导入中……")GoTo rt_1Exit SubEnd IfWorksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & 1Wendk1 = k1 + n - 1k2 = k2 + n - 1n = n + 1Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & 1While Worksheets("用料录入").Cells(asrd, 2).Value <> "over" '开始导入材料用量数据If Worksheets("用料录入").Cells(asrd, 2).Value <> 0 And Worksheets("用料录入").Cells(asrd, 2).Value <> "begin" ThenFor i = 1 To 6Worksheets("用料录入").Cells(k1, i).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & iWorksheets("用料录入").Cells(k1, i).Value = Worksheets("用料录入").Cells(k1, i).ValueIf Worksheets("用料录入").Cells(k1, i).Value = 0 Then Worksheets("用料录入").Cells(k1, i).Value = ""Nextva1 = va1 + 1ElseFor i = 2 To 6Worksheets("用料录入").Cells(k1, i).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & iWorksheets("用料录入").Cells(k1, i).Value = Worksheets("用料录入").Cells(k1, i).ValueIf Worksheets("用料录入").Cells(k1, i).Value = 0 Then Worksheets("用料录入").Cells(k1, i).Value = ""NextEnd IfFor i = 2 To 6Worksheets("用料录入").Cells(k2, i).Value = ""NextIf n1 = 40 Thena1 = "有大量空行数据,是否继续执行导入操作?" & vbLf & vbLfa1 = a1 & " '是' 继续导入数据." & vbLfa1 = a1 & " '否' 终止导入数据." & vbLfa1 = a1 & " '取消' 继续导入数据,不再提示."v = MsgBox(a1, 35, "数据导入中……")If v = 7 Then GoTo w10If v = 2 Then n2 = 1n1 = 0End IfIf Worksheets("用料录入").Cells(asrd, 2).Value = 0 And n2 = 0 Then n1 = n1 + 1k1 = k1 + 1k2 = k2 + 1n = n + 1Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]用料录入!R" & n & "C" & 1Wendw10: Worksheets("用料录入").Cells(k2, 1).Value = "over"'导入定位符rt_1: v = MsgBox("2、用料数据导入完毕,是否继续导入定位符?", 36, "数据导入中……") Worksheets("用料录入").Cells(asrd, 2).Value = ""If v = 6 Thenn = 2 '本表的定位符位置While Worksheets("统计分析").Cells(n, 18).Value <> ""n = n + 1Wendn1 = 2n2 = n1 + n - 2Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]统计分析!R" & n1 & "C" & 18Worksheets("用料录入").Cells(asrd, 2).Value = Worksheets("用料录入").Cells(asrd, 2).ValueIf Worksheets("用料录入").Cells(asrd, 2).Value = 0 Then Worksheets("用料录入").Cells(asrd, 2).Value = ""While Worksheets("用料录入").Cells(asrd, 2).Value <> "" And Worksheets("用料录入").Cells(asrd, 2).Value <> 0Worksheets("统计分析").Cells(n2, 16).Formula = "=[" & wenjianming & "]统计分析!R" & n1 & "C" & 16Worksheets("统计分析").Cells(n2, 16).Value = Worksheets("统计分析").Cells(n2, 16).ValueWorksheets("统计分析").Cells(n2, 17).Formula = "=[" & wenjianming & "]统计分析!R" & n1 & "C" & 17Worksheets("统计分析").Cells(n2, 17).Value = Worksheets("统计分析").Cells(n2, 17).Value + asrd - 2Worksheets("统计分析").Cells(n2, 18).Formula = "=[" & wenjianming & "]统计分析!R" & n1 & "C" & 18Worksheets("统计分析").Cells(n2, 18).Value = Worksheets("统计分析").Cells(n2, 18).ValueIf Worksheets("用料录入").Cells(Worksheets("统计分析").Cells(n2, 17).Value, Worksheets("统计分析").Cells(n2, 16).Value).Value = "" Then _Worksheets("用料录入").Cells(Worksheets("统计分析").Cells(n2, 17).Value, Worksheets("统计分析").Cells(n2, 16).Value).Value = _Worksheets("统计分析").Cells(n2, 18).Valueva2 = va2 + 1n1 = n1 + 1n2 = n1 + n - 2Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]统计分析!R" & n1 & "C" & 18Worksheets("用料录入").Cells(asrd, 2).Value = Worksheets("用料录入").Cells(asrd, 2).ValueWendCall dingweiEnd If'导入本表中没有的材料v = MsgBox("3、定位符数据导入完毕,是否继续导入材料库数据?", 36, "数据导入中……")If v = 6 ThenCall cailiaoax = 1 '判定是否有不同的材料n = 2 '本表的定位符位置ak = 0 '判断是否有多个余量系数0没有1有Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]材料管理!R" & 1 & "C" & 4Worksheets("用料录入").Cells(asrd, 2).Value = Worksheets("用料录入").Cells(asrd, 2).ValueIf Worksheets("用料录入").Cells(asrd, 2).Value = "余量系数1" Then ak = 1 '判断导入材料的版本Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]材料管理!R" & n & "C" & 1Worksheets("用料录入").Cells(asrd, 2).Value = Worksheets("用料录入").Cells(asrd, 2).ValueIf Worksheets("用料录入").Cells(asrd, 2).Value = 0 Then Worksheets("用料录入").Cells(asrd, 2).Value = ""While Worksheets("用料录入").Cells(asrd, 2).V alue <> ""For i = 1 To clgeshuIf Worksheets("用料录入").Cells(asrd, 2).Value = cllist(i).clname Thenax = 0Exit ForElseax = nEnd IfNextIf ax <> 0 Then '导入的材料进行名称排列axx = yhclgeshu + 2acd1 = Left(Worksheets("用料录入").Cells(asrd, 2).V alue, 2) ' 得到添加材料名称的前两个字符For i = 1 To clgeshuacd2 = Left(Worksheets("材料管理").Cells(i + 1, 1).Value, 2) ' 得到材料管理中材料名称的前两个字符If acd1 = acd2 ThenWorksheets("材料管理").Rows(i + 1).Insert Shift:=xlDownaxx = i + 1 '插入材料的位置Exit ForEnd IfNextclgeshu = clgeshu + 1yhclgeshu = yhclgeshu + 1va3 = va3 + 1Worksheets("材料管理").Cells(axx, 1).Value = Worksheets("用料录入").Cells(asrd, 2).ValueWorksheets("材料管理").Cells(axx, 2).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 2Worksheets("材料管理").Cells(axx, 2).Value = Worksheets("材料管理").Cells(axx, 2).ValueWorksheets("材料管理").Cells(axx, 3).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 3Worksheets("材料管理").Cells(axx, 3).Value = Worksheets("材料管理").Cells(axx, 3).ValueIf ak = 0 Then '导入2.3以前版本材料Worksheets("材料管理").Cells(axx, 4).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 4Worksheets("材料管理").Cells(axx, 4).Value = Worksheets("材料管理").Cells(axx, 4).ValueWorksheets("材料管理").Cells(axx, 5).Value = 1Worksheets("材料管理").Cells(axx, 6).Value = 1Worksheets("材料管理").Cells(axx, 7).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 5Worksheets("材料管理").Cells(axx, 7).Value = Worksheets("材料管理").Cells(axx, 7).ValueWorksheets("材料管理").Cells(axx, 8).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 6Worksheets("材料管理").Cells(axx, 8).Value = Worksheets("材料管理").Cells(axx, 8).ValueIf Worksheets("材料管理").Cells(axx, 8).Value = 0 Then Worksheets("材料管理").Cells(axx, 8).V alue = ""Else '导入2.3以后版本材料Worksheets("材料管理").Cells(axx, 4).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 4Worksheets("材料管理").Cells(axx, 4).Value = Worksheets("材料管理").Cells(axx, 4).ValueWorksheets("材料管理").Cells(axx, 5).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 5Worksheets("材料管理").Cells(axx, 5).Value = Worksheets("材料管理").Cells(axx, 5).ValueWorksheets("材料管理").Cells(axx, 6).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 6Worksheets("材料管理").Cells(axx, 6).Value = Worksheets("材料管理").Cells(axx, 6).ValueWorksheets("材料管理").Cells(axx, 7).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 7Worksheets("材料管理").Cells(axx, 7).Value = Worksheets("材料管理").Cells(axx, 7).ValueWorksheets("材料管理").Cells(axx, 8).Formula = "=[" & wenjianming & "]材料管理!R" & ax & "C" & 8Worksheets("材料管理").Cells(axx, 8).Value = Worksheets("材料管理").Cells(axx, 8).ValueIf Worksheets("材料管理").Cells(axx, 8).Value = 0 Then Worksheets("材料管理").Cells(axx, 8).V alue = ""End IfEnd Ifn = n + 1Worksheets("用料录入").Cells(asrd, 2).Formula = "=[" & wenjianming & "]材料管理!R" & n & "C" & 1Worksheets("用料录入").Cells(asrd, 2).Value = Worksheets("用料录入").Cells(asrd, 2).ValueIf Worksheets("用料录入").Cells(asrd, 2).Value = 0 Then Worksheets("用料录入").Cells(asrd, 2).Value = ""WendEnd Ifa1 = " 全部数据导入完毕!" & vbLf & vbLfa1 = a1 & "1、导入" & va1 & " 行用料数据." & vbLfa1 = a1 & "2、导入" & va2 & " 个定位符." & vbLfa1 = a1 & "3、导入" & va3 & " 种材料."v = MsgBox(a1, 48, "数据导入操作完成")Worksheets("用料录入").Cells(asrd, 2).Value = "数据来源" & filetoopenfiletoopen = "'"End If '数据导入完成End Sub。