不打开工作簿取得其他工作簿数据的几种方法_第1页
不打开工作簿取得其他工作簿数据的几种方法_第2页
不打开工作簿取得其他工作簿数据的几种方法_第3页
不打开工作簿取得其他工作簿数据的几种方法_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、不打开工作簿取得其他工作簿数据的几种方法在 Excel 的使用过程中,经常需要引用其他工作簿的数据,而用户往往希望能在不打开工作簿或看似不打开工作簿的情况下取得其他工作簿中的数据,有以下几种方法可以实现。1 1 数据不多时使用公式如果需要引用的数据不是太多,可以使用公式取得引用工作簿中的工作表数据,如下面的代码所示。SubCopyData_1()DimTempAsStringTemp=”&ThisWorkbook.Path&”数据表.xlsSheet1!WithSheet1.Range(A1:F22).FormulaR1C1=&Temp&RC”.Value=.V

2、alueEndWithEndSub代码解析:CopyData_1 过程在工作表中写入公式引用“数据表”中同一位置单元格中的数据。第 3 行代码将引用工作簿的路径赋给变量 Temp。第 5 行代码在作表中写入公式引用数据。第 6 行代码将公式转换为数值。2 2 使用 GetObjectGetObject 函数获取对指定的 ExcelExcel 工作表的引用使用 GetObject 函数来获取对指定的 Excel 工作表的引用,如下面的代码所示。SubCopyData_2()DimWbAsWorkbookDimTempAsStringApplication.ScreenUpdating=False

3、数据表.xlsSetWb=GetObject(Temp)WithWb.Sheets(1).Range(A1).CurrentRegionRange(A1).Resize(.Rows.Count,.Columns.Count)=.ValueWb.CloseFalseEndWithSetWb=NothingApplication.ScreenUpdating=TrueEndSub代码解析:CopyData_2 过程使用 GetObject 函数来获取“数据表”工作簿中的数据。第 4 行代码关闭屏幕更新加快运行速度。第 5 行代码将引用工作簿的路径赋给变量 Temp。第 6 行代码使用 Set 语句

4、将 GetObject 函数返回的对象赋给对象变量 Wb。第 7 行到第 10 行代码,当 GetObject 函数指定的对象被激活之后,就可以在代码中使用对象变量 Wb 来访问这个对象的属性和方法。其中第 7、8 行代码将“数据表”工作簿中的第 1 张工作表已使用区域的数据赋给本工作表的单元格,第 9 行代码关闭“数据表”工作簿,使用 GetObject 函数返回对象的引用时,虽然在窗口中看不到对象的实例,但实际上是打开的,所以需用 Close 语句将其关闭。第 12 行代码开启屏幕更新。3 3 隐藏 ApplicationApplication 对象来模拟不打开工作簿取数通过隐藏 Appl

5、ication 对象来模拟不打开工作簿取数,如下面的代码所示。SubCopyData_3()DimmyAppAsNewApplicationDimShAsWorksheetDimTempAsString数据表.xlsmyApp.Visible=FalseSetSh=myApp.Workbooks.Open(Temp).SheetsWithSh.Range(A1).CurrentRegionRange(A1).Resize(.Rows.Count,.Columns.Count)=.ValueEndWithmyApp.QuitSetSh=NothingSetmyApp=NothingEndSub代

6、码解析:CopyData_3 过程隐藏 Application 对象来模拟不打开工作簿取数。第 2 行代码使用 New 关键字隐式地创建一个 Application 对象。第 6 行代码将新创建的 Application 对象的 Visible 属性设置为 False,使之隐藏。第 7 行代码使用 Open 方法打开“数据表”工作簿(关于 Open 方法请参阅错误! 未找到引用源。 ,因为工作簿是使用新创建的、隐藏的 Application 对象打开的,所以在窗口中是不可视的。第 8 行到第 10 行代码将“数据表”工作簿中的第 1 张工作表已使用区域的数据赋给本工作表的单元格。第 11 行代

7、码使用 Quit 方法退出新打开的 Excel 程序。4 4 使用 ExecuteExcel4MacroExecuteExcel4Macro 方法使用 ExecuteExcel4Macro 方法可以做到不打开工作簿的情况下获取其他工作薄中指定工作表的数据,如下面的代码所示。SubCopyData_4()DimRCountAsLongDimCCountAsLongDimTempAsStringDimTemp1AsStringDimTemp2AsStringDimTemp3AsStringDimRAsLongDimCAsLongDimarr()AsVariantTemp=”&ThisWor

8、kbook.Path&”数据表.xlsSheet1!Temp1=Temp&Rows(1).Address(xlR1C1)Temp1=Counta(&Temp1&)CCount=Application.ExecuteExcel4Macro(Temp1)Temp2=Temp&Columns(A).Address(,xlR1C1)Temp2=Counta(&Temp2&)RCount=Application.ExecuteExcel4Macro(Temp2)ReDimarr(1ToRCount,1ToCCount)ForR=1ToRCountF

9、orC=1ToCCountTemp3=Temp&Cells(R,C).Address(,xlR1C1)arr(R,C)=Application.ExecuteExcel4Macro(Temp3)NextNextRange(A1).Resize(RCount,CCount).Value=arrEndSub代码解析:CopyData_4 过程使用 ExecuteExcel4Macro 方法获取“数据表”工作薄中指定工作表的数据。第 14、16 行代码使用 ExecuteExcel4Macro 方法执行 Counta 函数取得“数据表工作薄中指定工作表的行数和列数合计。第 18 行代码使用

10、ReDim 语句为动态数组 arr 重新分配存储空间。第 19 行到第 24 行代码循环取值,将“数据表”工作薄中指定工作表的数据赋给动态数组 arr。第 25 行代码将动态数组 arr 的值赋给工作表的单元格。5 5 使用 SQLSQL 连接查询数据记录后复制到当前工作表中使用 SQL 建立与工作簿的连接,查询数据记录后复制到当前工作表中,如下面的代码所示。SubCopyData_5()DimSqlAsStringDimjAsIntegerDimRAsIntegerDimCnnAsADODB.ConnectionDimrsAsADODB.RecordsetWithSheet5.Cells.C

11、learSetCnn=NewADODB.ConnectionWithCnn.Provider=microsoft.jet.oledb.4.0.ConnectionString=ExtendedProperties=Excel8.0;_数据表.OpenEndWithSetrs=NewADODB.RecordsetSql=select*fromSheet1$rs.OpenSql,Cnn,adOpenKeyset,adLockOptimisticForj=0Tors.Fields.Count-1.Cells(1,j+1)=rs.Fields(j).NameNextR=.Range(A65536).End(xlUp).Row.Range(A&R+1).CopyFromRecordsetrsEndWithrs.CloseCnn.CloseSetrs=NothingSetCnn=NothingEndSub代码解析:CopyData

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论