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

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

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

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

    推荐阅读
  • steam神界2原罪价格(年入3700万美元:神界原罪2怎么炼成的)

    在游戏行业,能够成功的工作室并不多,能够连续成功的则更是少见,比利时工作室LarianStudios就是为数不多的连续成功者之一。然而,这是一种平衡的艺术,Larian不希望失去挑战性和复杂性,但这就意味着玩家们可能遇到一些高难度战斗。尽管有诸多困难,《神界:原罪2》还是及时发布了,而且对话和语音都是完整的,Larian对于游戏剧情的极致追求,不仅为该工作室创造了连续成功,还赢得了全球玩家的一致认可。

  • 十年的剃须刀推荐(百元国产剃须刀红榜)

    焕醒剃须刀的刀片,钢是来自日本HITACHI日立的特种钢材。第一重,6层密集刀片,中间不会有肉被拉扯。第三重,润滑条采用天然乳木果精华,湿水分泌粘液,润滑皮肤防止刮伤。在小米众筹上的完成率是14142%,打破了历史记录。映趣BlackStone3相比前代刀网更薄,全身可以水洗,价格只要59元。素士作为小米供应链,根据亚洲人脸型特点开发并做了调整,更加贴合脸部。剃须最重要的是2点:刀片锋利剃须干净,有防护措施不会让自己受伤。

  • 想删除一直不联系的人(却又不想忘记的人怎么办)

    听说微信要出新版本,增加一键删除不常联系人的新功能,可以一键清理半年没联系的,没有朋友圈操作的,没有共同小群的联系人,听起来很高大上的样纸,省去了大家清僵尸粉的麻烦。让那些朋友加满了,每次要加人又不知道删谁好的朋友有了便捷的操作,然而这个功能定出的好友标准会不会太狭隘了呢?经常联系的就一定是朋友吗?做徽商、保险的每天早上都会给你发微信问候早安,然而他们只是个路人。

  • 滴滴司机想转型做什么(司机运营都是怎么做的)

    2018年5月份郑州一名空姐乘坐滴滴顺风车遇害,2018年8月浙江温州乐清市一名20岁女乘客乘坐滴滴顺风车遇害。自多起恶意伤害后,占据滴滴9成营收的顺风车业务无限期下线,直至2019年11月下旬在各城市试运行。截止2019年第三季度,滴滴活跃司机用户连续5个季度的下滑,其中司机使用率下降23%,用户使用日活跃率下降6.3%,如何挽回用户流失的问题迫在眉睫。

  • 狗狗咬人的话该怎么办(再温顺的狗狗也可能咬人)

    全世界每年有上千万人被狗咬伤,若是咬人的狗患有狂犬病,那么被咬的人一般都是凶多吉少。这是因为狗子很聪明,有打斗就意味着会受伤,在狗狗没有确定对方能否威胁到它之前,它是不会直接咬人的。因此我们常常会看到狗狗咬小孩,很少出现咬成年人的情况。这是因为狗狗的某些小动作容易被我们忽略掉。总之再温顺的狗狗也可能咬人,下次见了陌生的狗子,还是小心一点比较好。

  • 今非昔比下一句是什么(今非昔比下一句怎样读)

    “今非昔比”下一句是:物是人非:jīnfēixībǐ,wùshìrénfēi:现在不像从前,东西仍然是一样,可是人已经变了,下面我们就来说一说关于今非昔比下一句是什么?今非昔比下一句是什么“今非昔比”下一句是:物是人非。一般作谓语、定语、分句;:博古通今、抚今追昔、古今中外、借古讽今、今不如昔。

  • 2021广府庙会联动和平精英推出四圣吉市文化盛会

    广府庙会之“线上逛庙会”X《和平精英》活动入口:点击进入本次活动持续时间为2月12日-2月26日,玩家可以通过活动页面体验广州以及其他三地的地区特色文化及节日民俗文化,让人足不出户,手指点划之间了解从南到北,从东到西不同地区,不同城市的地域特色与年俗文化。

  • 酒过三巡是什么意思(酒过三巡的解释)

    以下内容希望对你有帮助!酒过三巡是什么意思酒过三巡是一个汉语词汇,拼音:jiǔguòsānxún释义:三并不是指具体的三杯或者三轮。而是指时间长数量多的意思。酒过三巡是指酒已经喝了有一段时间,喝了不少酒了。

  • 花的文案(花的文案精选)

    花的文案做个浪漫的人,从给自己买花开始。无人问津的港口总是开满鲜花。你来或不来,花都会为你而开。种自己的花,爱自己的宇宙。往心里装一片花海和大海,再多装一些少女心和爱。要长成自己想长成的样子,如花在野,温柔热烈。人的内心不种满鲜花,就会长满杂草。世界上有千千万万朵玫瑰,而只有你是我的独一无二。世间万物皆苦,你明目张胆的偏爱就是救赎。我不喜欢花,我只喜欢你抱着花朝我走来的样子。

  • wifidirect怎么连接(快来看看)

    wifidirect怎么连接WIFIDirect需要到googleplay上面下载一个APP,这个大家可以根据自己的需要下载,当然本身这个整体功能的使用也是看大家自己的需要,一般来说这个功能十分的方便和快捷。下载的时候,比较推荐WIFIDirect的这个下载,因为没有权限要求,然后两台机器打开这个软件,搜索,配对后,就可以在文件管理器中选择要发送。准备好以后传输文件的时候,一定要注意电脑的设置,一般电脑的设置需要无线网络的畅通,最好安装最新的无线网卡驱动。