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

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

    推荐阅读
  • 孙悟空为什么会从石头缝里蹦出来(为何孙悟空是从石头里蹦出来的)

    盖自开辟以来,每受天真地秀,日精月华,感之既久,遂有灵通之意。很明显,石头不具备这个功能,在西游世界里只有人和动物才能修仙。咦,千里眼、顺风耳虽然看到和听到了孙悟空出生后所做的事,可并没看见和听见孙悟空出生前是从石头生的卵里出来的啊。而且竟然还判断出了孙悟空吃了山泉,眼睛里的金光就会消失。说明千里眼顺风耳知道孙悟空的出生过程是怎么一回事。千里眼和顺风耳早就判定了孙悟空就是个普通的动物。

  • 英语怎么背才容易记住(英语经验分享明明)

    我们需要的只是正确的方法和毅力。英语学习涉及输入,吸收,输出三方面。就像背课文,一口气全背完,自豪感满满,但是!这就是低效输入。这些就是我们要学习的地方,把句子掰开揉碎,找到可以学习的地方。例如今早我打算八点起,一睁眼已经九点了,就可以说一句shit,Ifailedtogetupat8.这样也是一个复习的过程。第一次写,真的排版啥的也不会,我垃圾,谢谢你们看完欧

  • 面筋是什么做的(是用面粉做成的)

    面筋是面粉做的,不是豆制品,具体如下:食材:面粉,油把面粉放进盆里面放如适水分次加入用筷子搅拌成絮状用手活成面团放水开始洗面一个小时候后把洗面的水倒另一个盆子里面备用,反复用清水洗面,接下来我们就来聊聊关于面筋是什么做的?以下内容大家不妨参考一二希望能帮到您!面筋是什么做的面筋是面粉做的,不是豆制品,具体如下:食材:面粉,油。面筋上锅蒸5分钟。蒸好的面筋,完成。

  • 暗黑破坏神2重制版刺客怎么玩(暗黑破坏神2重置版刺客)

    因为新版取消了亡者守卫对雷光守卫的加成,我们把亡者守卫的点数分10点给飞镖加成技能,可以给飞镖的面板增加了1500左右,亡者守卫也有11码左右的范围,基本够用。1pp先放一个亡者守卫,接着飞镖点射,没有米山帮忙也能秒出尸体,很快就能清场,遇到物免再用雷光守卫,8pp得丢雷光守卫加飞镖,稳住了再丢亡者守卫辅助。

  • 自考成绩啥时候能出来(自考成绩什么时候出)

    各省份自考成绩一般会在考完试的一个月内陆续公布,详情请留意公众号近期推文。各省市规定可能有所不同,大多数省市通过的成绩是长期有效的。自考单科成绩8年有效并不是硬性规定,教育部将是否操作此规定的选择权给予了各省。部分省份单科成绩有效期是8年。而对于新考生,就是取得单科成绩的日期开始算起。每个科目都是60分为及格,不及格的,可参加下一次该门课程的考试,不限制参加考试的次数。

  • 发朋友圈的生日祝福语简短(适合发朋友圈的生日祝福语文案)

    发朋友圈的生日祝福语简短在生活和工作中,我们经常会收到很多的祝福,生日的习俗大概是魏晋南北朝时,在江南地区出现。而在蛋糕上点蜡烛的习俗源于希腊人,据说在生日上点蜡烛,具有神奇的力量,能够使愿望实现,点蜡烛是希望能够给过生日的人带来好运,道贺和祝福,来源于魔法,好的祝福能够给人带来好运。

  • 迷你世界造飞机需要哪些零件(飞机怎么建造)

    接下来我们就一起去了解一下吧!迷你世界造飞机需要哪些零件所需材料:滑动方块×标记器(+)×标记器(—)×开关×方块若干。迷你世界造飞机的过程就像搭积木,先摆出两个平行排列的方块,按照标记器(+)—滑动方块—标记器(—)的顺序连接,其中滑动方块的“+”朝向对面的木板。然后在木块上安装开关,当打开开关时,滑动方块会朝着“+”方向移动。最后以同样的方式,构建其余方向的模型,飞机就建造好了。

  • 可口可乐产品都有哪些(可口可乐将停产椰子水品牌Zico可口可乐将削减旗下超一半品牌)

    为应对疫情,该公司正大幅削减品牌数量。可口可乐的一位发言人对此表示,该公司目前高度专注于满足消费者的需要和需求,在此背景下决定今年年底前停产Zico。报道称,可口可乐在全球有500个全资或部分拥有的品牌,该公司此前表示,计划将这一数字削减一半以上。据了解,这一举措是新冠肺炎疫情引发的广泛重组措施之一,包括裁员和改进营销策略。

  • 司马光砸缸表现了他什么品质(司马光砸缸表现了他哪些品质)

    司马光砸缸表现了他什么品质司马光砸缸的故事表现出了司马光沉着冷静、果断、勇敢的品格。这个故事告诉我们无论遇到什么事情都应该沉着冷静,镇定自若,同时我们也应学习司马光那种沉着冷静,勇于救人的精神。司马光砸缸救人表现了他机智勇敢,智勇双全,乐于助人,冷静沉着,聪明的精神

  • win11系统自带杀毒软件在哪里关闭(11自带杀毒软件太灵敏了)

    这样可以在Windows11电脑上永久禁用WindowsDefender杀毒软件,更改如果不能立即生效,请重新启动电脑。