Option Explicit
Sub test()
'Excel
Dim objExcelFile As Workbook
'Word
Dim objWordApp As New Word.Application, objWordDoc As Word.Document
'PowerPoint
Dim objPptApp As New PowerPoint.Application, objPptFile As PowerPoint.Presentation
Dim strPath As String, strFileName As String, strNewFileName As String, intTemp As Integer, blNoMacro As Boolean
objWordApp.Visible = True
objPptApp.Visible = msoCTrue
'Disable vba running
Application.AutomationSecurity = msoAutomationSecurityForceDisable 'msoAutomationSecurityLow '=msoAutomationSecurityByUI = 'msoAutomationSecurityForceDisable
objWordApp.AutomationSecurity = msoAutomationSecurityByUI ' = msoAutomationSecurityForceDisable
objPptApp.AutomationSecurity = msoAutomationSecurityForceDisable
'open excel file
strPath = "C:\temp"
strFileName = "test"
Set objExcelFile = Application.Workbooks.Open(strPath & "\" & strFileName & ".xls")
'Has vba code or not
blNoMacro = False
For intTemp = 1 To objExcelFile.VBProject.VBComponents.Count 'How many objects
If objExcelFile.VBProject.VBComponents.Item(intTemp).CodeModule.CountOfLines > 0 Then
blNoMacro = True
Exit For
End If
'Save file
objExcelFile.SaveAs IIf(blNoMacro, strPath & "\" & strFileName & ".xlsm", strPath & "\" & strFileName & ".xlsx")
'......
objExcelFile.Close
'open word file
Set objWordDoc = objWordApp.Documents.Open(strPath & "\" & strFileName & ".doc")
'Has vba code or not
blNoMacro = False
For intTemp = 1 To objWordDoc.VBProject.VBComponents.Count 'How many objects
If objWordDoc.VBProject.VBComponents.Item(intTemp).CodeModule.CountOfLines > 1 Then
blNoMacro = True
Exit For
End If
'save file
objWordDoc.SaveAs2 IIf(blNoMacro, strPath & "\" & strFileName & ".docm", strPath & "\" & strFileName & ".docx")
objWordDoc.Close
'open ppt file
Set objPptFile = objPptApp.Presentations.Open(strPath & "\" & strFileName & ".ppt")
'Has vba code or not
blNoMacro = False
For intTemp = 1 To objPptFile.VBProject.VBComponents.Count 'How many objects
If objPptFile.VBProject.VBComponents.Item(intTemp).CodeModule.CountOfLines > 0 Then
blNoMacro = True
Exit For
End If
'save file
objPptFile.SaveAs IIf(blNoMacro, strPath & "\" & strFileName & ".pptm", strPath & "\" & strFileName & ".pptx")
objPptFile.Close
EXIT_SUB:
Set objExcelFile = Nothing
Set objWordApp = Nothing
Set objWordDoc = Nothing
Set objPptApp = Nothing
Set objPptFile = Nothing
End Sub
VBA目前已经势微,准确地说,可能从来没有火过。但是事实上,这真的是一门极其有用的语言。如果能够掌握,在日常工作中会带来巨大的便利。相信你能看到这里,说明你正在使用它并遇到了困难要解决,希望此文能帮上。
用VBA代码打开xls文件时,判断被打开的xls文件是否含VBA代码并禁止其运行说明需求背景禁止被打开文件中的vba运行判断打开的文件中是否含vba代码先取得打开的文件中有多少个components利用取得的对象数量, 取得每个对象中的代码行数需要注意的几个问题:附完整代码结语说明本文为原创,引用请注明出处,谢谢!需求背景公司在迁移质控体统的文件控件系统,新文控系统不支持老版的office文件(xls, doc, ppt等), 需要将其升版成新的xlsx, docx, pptx格式。显然,用vba
代码操作代码,倒是挺高级的。至少在学习C、Java等其他语言时没有这样玩过。事实上,今天使用VBA删除了待交付文件中的VBA代码,技术水平有了进一步的提高!这节的内容感觉挺充实,认真学习,会有收获的。'VBE对象是根对象,表示在VBA编辑器中存在的所有对象的最上层对象
'一 VBAproject对象: VBE编辑器中的工程
'1 VBComponents对象:表示工...
添加一个新的工作簿, Application.Add
Application.WorkBooks.Open ("C:\book.xlsx") '打开工作簿 book.xlsx
Sub 合并文件()
Dim 文件目录 As String, 文件名 As String, 文件扩展名 As String
Dim 打开的文件 As Workbook, 目标文件 As Workbook
Dim 目标工作表 As Worksheet, 工作表 As Worksheet
Dim 最后一行 As Long, 目标行 As Long
'设置文件目录
文件目录 = "C:\Users\UserName\Documents\Files\"
'设置目标文件
Set 目标文件 = Workbooks.Add(xlWBATWorksheet)
Set 目标工作表 = 目标文件.Worksheets(1)
目标行 = 1
'获取目录中的所有 Excel 文件
文件名 = Dir(文件目录 & "*.xls*")
'循环打开文件并复制数据到目标文件中
Do While 文件名 <> ""
Set 打开的文件 = Workbooks.Open(文件目录 & 文件名)
For Each 工作表 In 打开的文件.Worksheets
最后一行 = 工作表.Cells(Rows.Count, 1).End(xlUp).Row
工作表.Range("A1:Z" & 最后一行).Copy
目标工作表.Range("A" & 目标行).PasteSpecial xlPasteValues
目标行 = 目标行 + 最后一行
打开的文件.Close False
文件名 = Dir
'保存目标文件
目标文件.SaveAs 文件目录 & "合并文件.xlsx"
目标文件.Close
MsgBox "已完成合并。"
End Sub
这个代码将会打开一个指定目录下的所有 Excel 文件,然后将每个文件中所有工作表的数据复制到一个新的 Excel 文件中,最后保存该文件。