Excel 如何将循环中的文件保存为启用xlsm宏的格式?

Excel 如何将循环中的文件保存为启用xlsm宏的格式?,excel,vba,Excel,Vba,我有下面的代码循环文件并将它们保存为新文件 Sub ImportWorksheets() '============================================= 'Process all Excel files in specified folder '============================================= Dim sFile As String 'file to process Dim

我有下面的代码循环文件并将它们保存为新文件

Sub ImportWorksheets()
   '=============================================
   'Process all Excel files in specified folder
   '=============================================
   Dim sFile As String           'file to process
   Dim wbTarget As Workbook
   Dim wsTarget As Worksheet
   Dim wsHide1 As Worksheet 'Declare Sheets to hide'
   Dim wsHide2 As Worksheet
   Dim wsHide3 As Worksheet
   Dim wsHide4 As Worksheet
   Dim wbSource As Workbook
   Dim wsSource As Worksheet
   Dim rowTarget As Long 'output row

   'Master workbook row that needs to be updated with source data'
   rowTarget = 9
   
   'Source files location'
   Const FOLDER_PATH = "T:\SAMPLE DATA\1 - Split Raw Files\"

   'loop through the Excel files in the folder'
  sFile = Dir(FOLDER_PATH & "*.xls*")
  
'open template'
    Const MASTER = "T:\SAMPLE DATA\ V7 Template\Tool Template V7.xlsm"
    Set wbTarget = Workbooks.Open(MASTER)
   
    Set wsTarget = Sheets("DATABASE") 'Target sheet of where data from source needs to be inserted'
    
    'Sheets to hide'
    Set wsHide1 = Sheets("Office Use Only1")
    Set wsHide2 = Sheets("Office Use Only2")
    Set wsHide3 = Sheets("Office Use Only3")
    Set wsHide4 = Sheets("Office Use Only4")
    
         wsTarget.Visible = xlVeryHidden
         wsHide1.Visible = xlVeryHidden
         wsHide2.Visible = xlVeryHidden
         wsHide3.Visible = xlVeryHidden
         wsHide4.Visible = xlVeryHidden

    Do While sFile <> ""
    
        ' read source
        Set wbSource = Workbooks.Open(FOLDER_PATH & sFile) ' update links, readonly
        Set wsSource = wbSource.Sheets(1)
          
        ' create target'
        'wsTarget.Name = Replace(sFile, ".xlsx", "")'
        wsTarget.Name = "DATABASE"
        wsTarget.Unprotect "Password"
        wsTarget.Range("A" & rowTarget).Resize(1, 364) = wsSource.Range("A2:MZ2").Value
        wbTarget.SaveAs "T:\SAMPLE DATA\2 -Final  Files\" & sFile & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, _
        CreateBackup:=False
        wsTarget.Protect "Password"
        Application.DisplayAlerts = False 'Remove pop up messages'
        wbSource.Close False
    
        sFile = Dir
         wsTarget.Visible = xlVeryHidden
         wsHide1.Visible = xlVeryHidden
         wsHide2.Visible = xlVeryHidden
         wsHide3.Visible = xlVeryHidden
         wsHide4.Visible = xlVeryHidden
    Loop
    wbTarget.Close False

End Sub
子导入工作表()
'=============================================
'处理指定文件夹中的所有Excel文件
'=============================================
将sFile设置为要处理的字符串文件
将目标设置为工作簿
将目标设置为工作表
将wsHide1调整为工作表“声明要隐藏的工作表”
将wsHide2设置为工作表
将wsHide3设置为工作表
将wsHide4设置为工作表
将wbSource设置为工作簿
将wsSource设置为工作表
将行目标变暗为“长”输出行
'需要使用源数据更新的主工作簿行'
行目标=9
“源文件位置”
Const FOLDER_PATH=“T:\SAMPLE DATA\1-分割原始文件”
'循环浏览文件夹中的Excel文件'
sFile=Dir(文件夹路径&“*.xls*”)
“打开模板”
Const MASTER=“T:\SAMPLE DATA\V7 Template\Tool Template V7.xlsm”
设置wbTarget=工作簿。打开(主)
设置wsTarget=Sheets(“数据库”)“需要插入源数据的目标工作表”
“要隐藏的床单”
设置wsHide1=图纸(“仅限办公室使用1”)
设置wsHide2=图纸(“仅限办公室使用2”)
设置wsHide3=图纸(“仅限办公室使用3”)
设置wsHide4=图纸(“仅限办公室使用4”)
wsTarget.Visible=xlVeryHidden
wsHide1.Visible=xlVeryHidden
wsHide2.Visible=xlVeryHidden
wsHide3.Visible=xlVeryHidden
wsHide4.Visible=xlVeryHidden
在sFile“”时执行此操作
'读取源
设置wbSource=工作簿。打开(文件夹路径和文件)的更新链接,只读
设置wsSource=wbSource.Sheets(1)
“创建目标”
'wsTarget.Name=Replace(sFile,.xlsx,“”)
wsTarget.Name=“数据库”
wsTarget.Unprotect“Password”
wsTarget.Range(“A”和rowTarget).Resize(1364)=wsSource.Range(“A2:MZ2”)值
wbTarget.SaveAs“T:\SAMPLE DATA\2-Final Files\”&sFile&“.xlsm”,文件格式:=xlOpenXMLWorkbookMacroEnabled_
CreateBackup:=False
wsTarget.Protect“密码”
Application.DisplayAlerts=False“删除弹出消息”
wbSource。关闭False
sFile=Dir
wsTarget.Visible=xlVeryHidden
wsHide1.Visible=xlVeryHidden
wsHide2.Visible=xlVeryHidden
wsHide3.Visible=xlVeryHidden
wsHide4.Visible=xlVeryHidden
环
wbTarget,关闭False
端接头
但是,这些文件在循环中一直保存为xlsx文件,而不是xlsm格式的启用宏的文件。我还看到文件是用这种类型的“Microsoft Excel 97-2003工作表”保存的。。此格式应该是启用了Microsoft宏的工作簿,因为我使用FileFormat:=xlOpenXMLWorkbookMacroEnabled。

另外,当我尝试打开上面生成的文件时,如何删除此弹出窗口?我尝试使用Application.DisplayAlerts=False。然而,这似乎不起作用。

以另一种格式保存文件
  • 更改文件格式时,必须同时更改其扩展名和
    FileFormat
    参数
  • 另外,请注意,列
    MZ
    是列
    364
    ,而不是
    347
Dim NewName作为字符串
NewName=“T:\SAMPLE DATA\2-Files\”和“test-”&sFile
NewName=左(NewName,InStrRev(NewName,“.”)和“xlsm”
Application.DisplayAlerts=False“删除弹出消息”
wbTarget.SaveAs NewName,文件格式:=xlOpenXMLWorkbookMacroEnabled_
CreateBackup:=False
wsTarget.Protect“密码”
wbSource。关闭False
Application.DisplayAlerts=True

请使用“复制/粘贴”将代码添加为文本,然后选择它并使用
CTRL+K
对其进行格式化,还是让其他人进行格式化?使用帖子下方的
Edit
按钮。如上所述,请编辑您的问题,将您的代码作为文本,而不是图像-但是,我以前也有过类似的问题,我想解决它,我在新文件名的末尾添加了
.xlsm
。您好。谢谢你的评论。我已将代码另存为文本。@SamuelEverson我是否需要删除文件格式部分,只在sFile后包含“.xlsm”?能否共享完整的相关代码?我们看不到
sFile
的价值,这对回答您的问题至关重要。另外,在
Windows FileExplorer>View>Options>View
中取消选中
隐藏已知文件类型的扩展名可能会有所帮助。您不再是计算机初学者了。谢谢@vbasic208的帮助。我重新编写了我的整个代码,它向您展示了如何创建sFile。请看上面。非常感谢:)我已经更新(更正)了我的答案。