高考考试网
当前位置: 首页 高考资讯

excel自动获取vbscript数据(使用VBScript实现多Excel文件相互sheet拷贝等操作)

时间:2023-07-27 作者: 小编 阅读量: 5 栏目名: 高考资讯

excel自动获取vbscript数据之前的使用VBA实现的多文件相互sheet拷贝。在实践中,发现文件的数量越多,文件的大小越大,VBA工具越不稳定。这主要是因为VBA不够稳定,而且非常耗费内存。更改为VBScript后,性能问题大为改善。基本不需要人工干预了。另外有一些对象没有关闭,虽不影响执行,但是会产生一些内存垃圾。代码'标注必须显示声明各种变量OptionExplicit'声明变量的时候,不需要类型。

excel自动获取vbscript数据?之前的【工作拾遗2 VBA工具实现Module和Sheet的拷贝及按钮绑定宏】使用VBA实现的多文件相互sheet拷贝在实践中,发现文件的数量越多,文件的大小越大,VBA工具越不稳定经常会出现各种奇怪的问题出现问题的时候, 就需要手工干预这主要是因为VBA不够稳定,而且非常耗费内存更改为VBScript后,性能问题大为改善 基本不需要人工干预了,今天小编就来聊一聊关于excel自动获取vbscript数据?接下来我们就一起去研究一下吧!

excel自动获取vbscript数据

之前的【工作拾遗2 VBA工具实现Module和Sheet的拷贝及按钮绑定宏】使用VBA实现的多文件相互sheet拷贝。在实践中,发现文件的数量越多,文件的大小越大,VBA工具越不稳定。经常会出现各种奇怪的问题。出现问题的时候, 就需要手工干预。这主要是因为VBA不够稳定,而且非常耗费内存。更改为VBScript后,性能问题大为改善。 基本不需要人工干预了。

涉及到的功能

使用VBS操作Excel的Sheet,Module,打开,保存,关闭等

输出log

取得当前文件夹

文件的基本操作,追加模式,建立文件,判断存在,删除等

可参照之前的VBA实现的相同功能,对比一下不同。另外有一些对象没有关闭,虽不影响执行,但是会产生一些内存垃圾。作者比较懒,先不修正了。

代码

' 标注必须显示声明各种变量 Option Explicit ' 声明变量的时候,不需要类型。否则会出编译错误 Dim objExcel Dim currentPath Dim templateWorkbook Dim jsonConverter Dim loadAdip Dim util Dim objFSO Dim objLogfile' 建立很常用的fso对象,用来操作普通文件 Set objFSO = CreateObject("Scripting.FileSystemObject") ' 建立Excel对象 Set objExcel = CreateObject("Excel.Application")' 取得当前文件夹 currentPath = objFSO.GetFolder(".").Path ' 追加模式打开/建立log文件 Set objLogfile = objFSO.OpenTextFile(currentPath & "\AddDDSheet.log", 8, True)' 上一章讲过,不显示警告对话框 objExcel.DisplayAlerts = False ' 输出log writeLog objLogfile, "############## Start ##############"' 取得需要拷贝的Sheet存在的模板文件Set templateWorkbook = objExcel.Workbooks.Open(currentPath & "CopyFrom.xlsm")' 取得需要拷贝的Module,从文件中导出到当前文件夹 module1 = currentPath & "\module1.bas" templateWorkbook.VBProject.VBComponents("module1").Export jsonConverter' 递归调用sub,实现将Sheet和Module拷贝到当前文件夹\files下所有Excel文件中 ' 这里需要注意,只有扩展名为xlsm的Excel文件才能接收Module LoopAllSubFolders currentPath & "\files", templateWorkbook' 关闭模板文件 templateWorkbook.Close() ' 将刚才导出的module删除 If IsExitAFile(module1) Then DeleteAFile(module1) END ifobjExcel.DisplayAlerts = True Set objExcel = nothing writeLog objLogfile, "############## End ##############" objLogfile.close() Set objFSO = Nothing Set objLogfile = Nothing msgbox("Execution over")' 递归调用的sub,也是主要功能模块Sub LoopAllSubFolders(folderPath, template) Dim fileName Dim fullFilePath Dim tempWorkbook Dim tempWorksheet Dim currentPathDim fso Dim folder Dim files Dim basefolder Dim subFolders Dim fileIf Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"Set fso = CreateObject("Scripting.FileSystemObject") Set basefolder = fso.GetFolder(folderPath) For Each file In basefolder.files fileName = file.Name ' excel files only If Right(fileName, 5) = ".xlsx" Or Right(fileName, 5) = ".xlsm" ThenSet tempWorkbook = objExcel.Workbooks.Open(folderPath & fileName)Dim isExist isExist = FalseIf worksheetExists("EventDefinition", tempWorkbook) Or worksheetExists("DBMapping(R)", tempWorkbook) Or _ worksheetExists("DBMapping(CUD)", tempWorkbook) Or worksheetExists("Master", tempWorkbook) Then isExist = True End IfIf isExist Then tempWorkbook.Close ElseDim module1 module1 = currentPath & "\module1.bas"' 导入module到目标文件 If IsExitAFile(module1) Then tempWorkbook.VBProject.VBComponents.Import module1' 拷贝多个Sheet到目标文件 ' 这里要注意,Copy方法有两个参数,第一个是Before,第二个是After,想指定拷贝到某个Sheet之前,需要用第一个, 否则需要用第二个。 这里用的第二个, 所以第一个参数是空的,第二个参数和空的第一个参数之间用逗号间隔 template.Worksheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Copy , tempWorkbook.Worksheets(tempWorkbook.Worksheets.Count)' 将module中的宏绑定到按钮上 tempWorkbook.Worksheets("Sheet1").Shapes("Button 1").OnAction = tempWorkbook.Name & "!Module1.execute"' 保存文件 tempWorkbook.Save' 关闭文件 tempWorkbook.ClosewriteLog objLogfile, "############## " & folderPath & fileName & "executed ##############" End If End If Next ' 递归 Set subFolders = basefolder.subFoldersFor Each folder In subFoldersLoopAllSubFolders folder.path, templateNextEnd Sub' 判断Sheet是否存在Function worksheetExists(shtName, wb) Dim sht worksheetExists = False For Each sht In wb.Worksheets If sht.Name = shtName Then worksheetExists = True exit for End if NextEnd Function' 输出logSub writeLog(objLogfile, str)objLogfile.WriteLine FormatDateTime(Now(), 1) & _" " & FormatDateTime(Now(), 3) & " " & strEnd Sub' 判断文件是否存在Function IsExitAFile(filespec) Dim fso Set fso=CreateObject("Scripting.FileSystemObject")If fso.fileExists(filespec) ThenIsExitAFile=TrueElse IsExitAFile=FalseEnd IfEnd Function' 删除文件Sub DeleteAFile(filespec) Dim fso Set fso= CreateObject("Scripting.FileSystemObject") fso.DeleteFile(filespec)End Sub

    推荐阅读
  • 常州地铁一号线各站名(常州地铁一号线各站名是怎样的)

    常州地铁1号线,是中国江苏省常州市第一条开工建设的地铁线路,于2014年10月28日开工建设,于2019年9月21日开通运营,标志色为红色。常州地铁1号线列车红小梦以红色和黑色为主色调,不仅融入了常州的城市特色,也体现了轨道交通车辆的现代感和时尚感。另外,在色彩和造型上结合了常州市市花月季花、常州市市树广玉兰和龙城的龙须等元素,整体风格和谐。

  • 如意芳霏男主角是谁(如意芳霏男主角由谁主演)

    如意芳霏男主角是谁《如意芳霏》的男主角徐晋由张哲瀚出演。徐晋,肃王、四皇子,曾为镇北副将军,金翊卫统领,隐忍冷静,外表看上去冷酷无情,实则只是因为从小生活的环境,不擅长表达自己的感情,是个内里温柔细腻的人。张哲瀚,中国内地男演员,祖籍江西新余,1991年5月11日出生,毕业于上海戏剧学院。2010年参演第一部电视剧《怎么会爱上你》中的夏誉希而出道,2012年参演第一部电影《诡爱》。

  • 玩说唱必须知道的知识(说唱干货:看完这个就去混圈)

    起初,Hip-Hop的都市生活和暴力的主题与现代基督教音乐的和平与轻松似乎无缘。然而,DCTalk,T-Bone和TransformationCrusade发现这两者的混合体是有观众的。而不少GangstaRap乐手本身真正“参与”现实中各式罪案,部分更因而入狱甚至死亡,可说是真正反映现实兼令人触目惊心的乐种。过渡说唱过渡说唱是指那些从其核心的都市听众转移到主流流行榜的Hip-Hop。大多数的过渡说唱就是流行说唱,注重于流行的歌曲结构和主题。

  • 黑枸杞和红枣泡水的功效(黑枸杞和红枣泡水的功效有哪些)

    红枣具有很好的滋补养颜的效果,而黑枸杞里面花青素含量很高,这是一种可以增加血管弹性,促进肌肤弹性的滋补品,特别适合肌肤暗淡无光泽,并且皮肤松弛、粗糙的人食用。花青素能抗氧化,而且黑枸杞营养价值很高,可以为人体提供很多的营养成分,并且能够有效的降低体内的有害物质的排泄和形成,可以有效的提高人体免疫力,特别适合体质比较多的人长期食用,提高免疫力能力强大。

  • 李小璐怎么没有杨幂火(女星扮丑也是够拼了)

    女星扮丑也是够拼了,李小璐自毁形象,杨幂被吐槽认不出。第三个就是李小璐,李小璐的颜值是360度都无死角的,不过李小璐曾出演的电视剧《私人订制》中,一改往日形象,当起了村姑,黑黑的皮肤,穿着破旧衬衫,头裹着一条毛巾,看样子是村姑无疑了。第四个是杨幂,杨幂在娱乐圈中的发展十分好,曽出演电视剧《美人心计》里面满脸雀斑脸上还有一块胎记,看上去确实够丑了,真是自毁形象,简直丑到认不出了。

  • 迷你世界如何做闪电特效(发光气球怎样制作)

    迷你世界如何做闪电特效?前言:迷你世界大神教你制作发光气球,10秒就能做好一个,到了晚上视觉效果超棒,我来为大家讲解一下关于迷你世界如何做闪电特效?跟着小编一起来看一看吧!这款发光气球制作也是比较简单,只需要10秒就能做好一个,小伙伴们学会后可以安装在自己建造的别墅小屋,装饰后会让生存小屋更漂亮,下面我们就来学习一下大神是如何制作这款漂亮的发光气球吧。

  • 咸蛋黄玉米的做法(咸蛋黄玉米怎么做)

    主料:玉米1根咸蛋黄2个2人份、花生油适量;,现在小编就来说说关于咸蛋黄玉米的做法?下面内容希望能帮助到你,我们来一起看看吧!咸蛋黄玉米的做法主料:玉米1根咸蛋黄2个2人份、花生油适量;准备好食材,玉米粒掰下备用;蛋黄捣碎;热锅倒油;倒入玉米粒炒熟盛出备用;锅中留油,倒入咸蛋黄小火炒至冒出细小的泡泡;倒入玉米粒,均匀裹上咸蛋黄即可。

  • 什么叫洪水(洪水分为多少种类型)

    并上涌到一定高度,就构成洪水威胁,甚至造成灾害。由于河湖水量交换或湖面气象因素作用或两者同时作用,可发生湖泊洪水。吞吐流由河湖水量交换引起,只要承纳和排出河流洪水的湖泊,就有吞吐流沿水力梯度流动。如洞庭湖,吞吐流是基本而稳定的水流方式。中国湖泊中的吞吐流、风生流或二者同时发生的混合流,流速都不大,是缓慢流动的水域,同时夏季多处于汛期,湖面宽阔,水深增大,风浪也大。

  • 青椒日本豆腐的家常做法(青椒日本豆腐的烹饪方法)

    下面更多详细答案一起来看看吧!青椒日本豆腐的家常做法材料:日本豆腐2条、青椒2个、香菇、水发笋、胡萝卜、鸡蛋清、生粉、葱、姜、盐、糖、味精、生抽番茄酱少许。

  • 明凯lol巅峰操作(主播特权还能恢复信誉积分)

    要知道当时明凯可是连排位都大不了的,更别说巅峰赛了,信誉积分本身对于玩家来说就起到一个限制的作用,避免玩家摆烂,如果摆烂的玩家能够通过信誉积分瞬间恢复的话,那么游戏的公平性就会降低非常多。看到明凯的操作之后很多玩家都非常生气,信誉积分系统本身就有明确的规定,那么凭什么主播可以通过其他手段来恢复自己的信誉积分呢?