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

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

    推荐阅读
  • 去年做的阿胶糕现在还能吃吗 去年冬天的阿胶糕今年还能吃吗

    但如果是做好的阿胶糕一直放置在室温下,或者是没有密封装好的话则不建议再继续吃了,因为这种情况下放置一年的话阿胶糕很容易变质。闻味道如果阿胶糕闻起来有很明显的发酸发苦的味道,并且十分的难闻的话,则说明阿胶糕可能是变质的。因为正常的阿胶糕闻起来是香甜的,会略微带一点酒味和苦味。但阿胶糕本身口感会比较的甜,再加上红糖之后其口感会更加的甜腻,如果是不喜欢吃那么甜的人的话建议少放或者是不放红糖。

  • 摩天大楼剧情(讲的是酸奶故事)

    下面内容希望能帮助到你,我们来一起看看吧!摩天大楼剧情剧情:在一所与世隔绝的高层公寓中住户之间的阶级斗争与暴力事件。这一座高级公寓共40层,拥有超过2000套独立的套房,超市、游泳池、小学等生活设施一应俱全,各楼层通过高速电梯连接,形成一个完全独立于外界的小社会。不同阵营的居民为了有限的公共资源开始暴力相向,文明世界的规则在这里已经不再适用,取而代之的是丛林法则。

  • 冬枣大棚怎么搭建技术,冬枣是什么季节的水果

    一定要注意大棚的抗风系数和采光面积,否则会降低冬枣的品质和产量。买回家的冬枣如果不能马上吃完,可以在阴凉干燥的地方存放几天,尽量在1个星期内吃完。

  • 抬腿运动方法(运动的时候要注意什么)

    下面希望有你要的答案,我们一起来看看吧!抬腿运动方法仰卧平躺在床上,先用最大力量把腿伸直,之后抬起腿,大概抬到脚后跟离床面15厘米左右的高度。注意一定要膝关节伸直,这样才能充分动员股四头肌的肌纤维,可以分别试验一下,伸直抬起来和稍微弯着一点抬起来,用力大小的区别非常大,还可以看到和摸到肌肉收缩的程度也差很多。

  • 手指上戴貔貅有什么讲究吗(为什么戴貔貅的人容易发财)

    貔貅,千百年的招财神兽而在所有玉石雕刻而成的题材中,貔貅更是成为了人们的最_爱!人们长期佩戴貔貅,可以招财进宝、吸纳四方之财、赶走邪_气、带来好运。看到这里,朋友们的问题肯定来了,我也喜欢貔貅,但是我怎么才能买到天然品质,真正具有招财寓意的貔貅呢?其实,真正懂貔貅的人都知道,只有正宗的皇_家貔貅才能招财护主,给人带来好运,不正宗的貔貅不仅不会带来好处,甚至还会影响到主人运势。

  • 冬季十款养生菜让你少生病 夏季养生菜

    中医认为,吃笋有滋阴、益血、化痰、消食、利便、明目的作用。起锅加少量精盐食用。这道菜可增强机体免疫功能,对高血脂患者更为适宜。香菜、盐、鸡精、料酒、葱、姜、胡椒粉适量。

  • 极化液的配制(极化液你需要掌握的知识点都在这里)

    极化液能使病态的心肌细胞恢复细胞膜的极化状态,对保护缺血损伤的心肌、改善窦房和房室传导,防止心律失常均有一定作用。现广泛应用于心内科和心外科、重症感染、创伤及围手术期的患者。3)作用:动态调整极化液方案可很好的控制低血糖的发生,有助于患者平稳度过危险期。

  • 蛋酥花生怎么做才酥脆(香甜酥脆的炸花生粘果这样做)

    一盘生花生米里打入一个鸡蛋,搅匀倒入两勺干淀粉搅匀三分之一锅油,七分热时倒入搅匀的花生,继续搅防止粘,五分钟左右捞出无油锅倒入半碗水半碗糖,不断搅动,待糖水粘稠冒泡时把花生倒入,不断搅动,使花生全部粘满糖即可出锅待凉,吃起来口感更酥脆甜酥脆的花生粘果就做好了

  • 冬天在野外吃什么菜好(二月二宅家不出门)

    二月二宅家不出门明天就是农历的二月二龙抬头节了,二月也是农事活动最多季节,因此也称之为“春耕节”,每年的二月二龙抬头不同的地区都有不同的习俗,南方部分地区“二月二”龙抬头节习俗又有祭社习俗,祈福新的一年风调雨顺、五谷。

  • 哪些人需要申请苏康码? 苏康码每个人都要申请吗

    所有入苏返苏人员在苏工作、学习、生活、旅游或临时停留的人员需申请并使用“苏康码”。入苏返苏人员在火车站、汽车站、飞机场和轮船码头出口处和交通卡口使用“苏康码”进行健康状况申报;进入机关、企事业单位、社区(村)、公共交通、宾馆饭店、商场超市等公共场所的人员,使用“苏康码”展示健康状况;个人通过出示“苏康码”,实现互相检查。