如何在EXCEL中使用VBA的SAVE AS方法
时间:2009-07-09 15:54:17
作者:officeba 【认证】
Use the VBA SaveAs Method in Excel 2007 使用的VBA SaveAs方法在Excel 2007
Today's author is Ron de Bruin , an Excel MVP. 今天的作者是罗恩日布鲁因,一个Excel的MVP 。 You can find more useful tips and links to Excel add-ins at his website: http://www.rondebruin.nl/ 您可以找到更多有用的提示和链接到Excel增益集在他的网站: http://www.rondebruin.nl/
You see a lot of old SaveAs code that does not specify the FileFormat你看到了很多旧另存为代码,没有具体说明FileFormat
parameter.参数。 In Excel versions before Excel 2007, code without this parameter在Excel的版本之前, Excel 2007中,代码没有这个参数
will not cause too many problems because Excel will use the current FileFormat不会引起太多的问题,因为Excel将使用目前的FileFormat
of the existing file -- and the default FileFormat for new files is a normal workbook.现有的文件-和默认FileFormat的新文件是一种正常的工作簿。 But because there are so many new file formats in Excel 2007, you shouldn't但是,由于有许多新的文件格式,在Excel 2007中,你不应该
use code that doesn't specify the FileFormat parameter.使用代码,没有具体说明FileFormat参数。
In Excel 2007, the SaveAs method requires you to provide both the FileFormat parameter and the correct file extension.在Excel 2007中, SaveAs方法要求您提供的FileFormat参数和正确的文件扩展名。
For example, in Excel 2007 this line of code will fail if the ActiveWorkbook is not an .xlsm file:例如,在Excel 2007中这一行代码会失败如果ActiveWorkbook不是。 xlsm文件:
ActiveWorkbook.SaveAs "C:\ron.xlsm" ActiveWorkbook.SaveAs的“ C : \ ron.xlsm ” But this code will always work:但是,此代码将始终工作:
ActiveWorkbook.SaveAs "C:\ron.xlsm" , fileformat:=52 ActiveWorkbook.SaveAs的“ C : \ ron.xlsm ” , fileformat : = 52
' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (workbook with macro's in 2007) ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (簿与宏观的, 2007年) These are the main file formats in Excel 2007:这些是主要的文件格式,在Excel 2007中:
51 = xlOpenXMLWorkbook (without macro's in 2007, .xlsx) 51 = xlOpenXMLWorkbook (无宏观的, 2007年。 xlsx )
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007, .xlsm) 52 = xlOpenXMLWorkbookMacroEnabled (有或没有宏观调控的2007年。 xlsm )
50 = xlExcel12 (Excel Binary Workbook in 2007 with or without macro's, .xlsb) 50 = xlExcel12 ( Excel的二进制工作簿在2007年有或没有宏观的, 。 xlsb )
56 = xlExcel8 (97-2003 format in Excel 2007, .xls) 56 = xlExcel8 ( 97-2003格式在Excel 2007中, 。 XLS )提供
Note : I always use the FileFormat numbers instead of the defined constants 注 :我一直使用FileFormat号码,而不是定义的常量
in my code so that it will compile OK when I copy the code into an Excel在我的代码,以便将汇编行当我复制代码到Excel
97-2003 workbook. 97-2003工作簿。 (For example, Excel 97-2003 won't know what the (例如, Excel会97-2003不会知道
xlOpenXMLWorkbookMacroEnabled constant is.) xlOpenXMLWorkbookMacroEnabled常数。 )
Example例如
At the end of this section is a basic VBA code example for a macro named Copy_ActiveSheet_New_Workbook() that copies the ActiveSheet to a new Workbook and then saves it in a format that matches the file extension of the parent workbook.在结束本节是一个基本的VBA代码范例巨集命名Copy_ActiveSheet_New_Workbook ( )的复制ActiveSheet到一个新的工作簿 ,然后保存它的格式相匹配的文件扩展名的母公司簿。
Note : You can use this macro in Excel 97-2007. 注 :您可以使用此宏在Excel 97-2007 。
If you run the code in Excel 2007, it will look at the FileFormat of the parent workbook and save the new file in that format.如果您运行该代码在Excel 2007中,它会看看FileFormat父簿并保存新的文件格式。 However, if the parent workbook is an .xlsm file and there is no VBA code in the new workbook, the code will save the new file as an .xlsx file.但是,如果父母是一个工作簿。 xlsm文件, 也没有VBA代码中的新的工作簿,则该代码将保存新文件作为。 xlsx文件。
If the parent workbook is not an .xlsx, .xlsm or .xls file, then it will be saved as an .xlsb file.如果父母不是一个工作簿。 xlsx , 。 xlsm或。 xls文件,然后将被保存为一个。 xlsb文件。
If you always want to save in a certain format you can replace this part of the macro:如果你总是要保存在一定的格式,您可以取代这部分的宏观调控:
Select Case Sourcewb.FileFormat 选择病例 Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx" : FileFormatNum = 51 案例 51 : FileExtStr = “ 。 xlsx ” : FileFormatNum = 51
Case 52: 案例 52 :
If .HasVBProject Then 如果 。 HasVBProject 然后
FileExtStr = ".xlsm" : FileFormatNum = 52 FileExtStr = “ 。 xlsm ” : FileFormatNum = 52
Else 其他的
FileExtStr = ".xlsx" : FileFormatNum = 51 FileExtStr = “ 。 xlsx ” : FileFormatNum = 51
End If 为此 , 如果
Case 56: FileExtStr = ".xls" : FileFormatNum = 56 案例 56 : FileExtStr = “ 。 xls ” : FileFormatNum = 56
Case Else : FileExtStr = ".xlsb" : FileFormatNum = 50 案例别的东西 : FileExtStr = “ 。 xlsb ” : FileFormatNum = 50
End Select 结束选择 With the single line of code from this list for the format you want to use:与单一的代码行从这个清单的格式要使用: FileExtStr = ".xlsb" : FileFormatNum = 50 FileExtStr = “ 。 xlsb ” : FileFormatNum = 50
FileExtStr = ".xlsx" : FileFormatNum = 51 FileExtStr = “ 。 xlsx ” : FileFormatNum = 51
FileExtStr = ".xlsm" : FileFormatNum = 52 FileExtStr = “ 。 xlsm ” : FileFormatNum = 52
FileExtStr = ".xls" : FileFormatNum = 56 FileExtStr = “ 。 xls ” : FileFormatNum = 56 Or maybe you want to save the one sheet workbook to .csv, .txt, or .prn.或者,也许您想储存一张活的。 csv , 。 TXT或。美通社。 (you can use this also if you run the macro in Excel 97-2003) (您可以使用此还如果您运行该宏在Excel 97-2003 )
FileExtStr = ".csv" : FileFormatNum = 6 FileExtStr = “的。 csv ” : FileFormatNum = 6
FileExtStr = ".txt" : FileFormatNum = -4158 FileExtStr = “ 。文本” : FileFormatNum = -4158
FileExtStr = ".prn" : FileFormatNum = 36 FileExtStr = “ 。商业电讯” : FileFormatNum = 36 Here's the full code example.这是充分的代码示例。
Sub Copy_ActiveSheet_New_Workbook() 小组 Copy_ActiveSheet_New_Workbook ( )
'Working in Excel 97-2007 '工作在Excel 97-2007
Dim FileExtStr As String 点心 FileExtStr 作为字符串
Dim FileFormatNum As Long 点心 FileFormatNum 只要
Dim Sourcewb As Workbook 点心 Sourcewb 作为工作簿
Dim Destwb As Workbook 点心 Destwb 作为工作簿
Dim TempFilePath As String 点心 TempFilePath 作为字符串
Dim TempFileName As String 点心 TempFileName 作为字符串
With Application 与应用
.ScreenUpdating = False 。 ScreenUpdating = 假
.EnableEvents = False 。 EnableEvents = 假
End With 结束
Set Sourcewb = ActiveWorkbook 集 Sourcewb = ActiveWorkbook
'Copy the sheet to a new workbook 复制工作表 , 以一个新的工作簿
ActiveSheet.Copy ActiveSheet.Copy
Set Destwb = ActiveWorkbook 集 Destwb = ActiveWorkbook
'Determine the Excel version and file extension/format '判断Excel版本和文件扩展名/格式
With Destwb 与 Destwb
If Val(Application.Version) < 12 Then 如果缬氨酸( Application.Version ) “ 12 然后
'You use Excel 97-2003 '您使用Excel 97-2003
FileExtStr = ".xls" : FileFormatNum = -4143 FileExtStr = “ 。 xls ” : FileFormatNum = -4143
Else 其他的
'You use Excel 2007 '您使用的是Excel 2007年
'We exit the sub when your answer is NO in the security dialog that you '我们退出小组当您答案是否定的安全对话 , 你
'only see when you copy a sheet from a xlsm file with macro's disabled. '只看到当您复制一张从xlsm文件与宏观的残疾人。
If Sourcewb.Name = .Name Then 如果 Sourcewb.Name = 。 名称
With Application 与应用
.ScreenUpdating = True 。 ScreenUpdating = 真
.EnableEvents = True 。 EnableEvents = 真
End With 结束
MsgBox "Your answer is NO in the security dialog" MsgBox “你的答案是否定的安全性对话”
Exit Sub 退出小组
Else 其他的
Select Case Sourcewb.FileFormat 选择病例 Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx" : FileFormatNum = 51 案例 51 : FileExtStr = “ 。 xlsx ” : FileFormatNum = 51
Case 52: 案例 52 :
If .HasVBProject Then 如果 。 HasVBProject 然后
FileExtStr = ".xlsm" : FileFormatNum = 52 FileExtStr = “ 。 xlsm ” : FileFormatNum = 52
Else 其他的
FileExtStr = ".xlsx" : FileFormatNum = 51 FileExtStr = “ 。 xlsx ” : FileFormatNum = 51
End If 为此 , 如果
Case 56: FileExtStr = ".xls" : FileFormatNum = 56 案例 56 : FileExtStr = “ 。 xls ” : FileFormatNum = 56
Case Else : FileExtStr = ".xlsb" : FileFormatNum = 50 案例别的东西 : FileExtStr = “ 。 xlsb ” : FileFormatNum = 50
End Select 结束选择
End If 为此 , 如果
End If 为此 , 如果
End With 结束
' 'If you want to change all cells in the worksheet to values, uncomment these lines. ' '如果您想要变更的所有细胞的工作价值观,注释 , 这些方针。
' With Destwb.Sheets(1).UsedRange 随着Destwb.Sheets ( 1 ) 。 UsedRange
' .Cells.Copy ' 。 Cells.Copy
' .Cells.PasteSpecial xlPasteValues ' 。 Cells.PasteSpecial xlPasteValues
' .Cells(1).Select ' 。细胞( 1 ) 。选择
' End With '结束
' Application.CutCopyMode = False ' Application.CutCopyMode =假
'Save the new workbook and close it '保存新工作簿并关闭它
TempFilePath = Application.DefaultFilePath & "\" TempFilePath = Application.DefaultFilePath & “ \ ”
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "yyyy-mm-dd hh-mm-ss" ) TempFileName = “部分”与Sourcewb.Name & “ ” &格式(现在, “格式yyyy - mm -日的HH -毫米党卫军” )
With Destwb 与 Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum 。另存为TempFilePath & TempFileName & FileExtStr , FileFormat : = FileFormatNum
.Close SaveChanges:= False 。关闭SaveChanges : = 假
End With 结束
MsgBox "You can find the new file in " & TempFilePath MsgBox “你可以找到新的文件在” & TempFilePath
With Application 与应用
.ScreenUpdating = True 。 ScreenUpdating = 真
.EnableEvents = True 。 EnableEvents = 真
End With 结束
End Sub 完小组