VBA,工作簿workbook相关操作,workbooks.add workbooks.save workbooks.saveas 等等

0 总结

  • VBA里参数   filename:= 很灵活的一个参数
  • 可能是带路径和后缀名的
  • 也可以是纯文件名,甚至后缀名都不带。格式由fileformat指定

 

1  Workbooks.Add 方法 

1.1 语法

  • 新建一个工作表。新工作表将成为活动工作表。
  • 语法
  • 表达式.Add(Template)
  • 表达式   一个代表 Workbooks 对象的变量。
  • 参数
  • 名称 必选/可选 数据类型 说明 
  • Template 可选 Variant 确定如何创建新工作簿。如果此参数为指定现有 Microsoft Excel 文件名的字符串,那么创建新工作簿将以该指定的文件作为模板。如果此参数为常量,新工作簿将包含一个指定类型的工作表。可为以下 XlWBATemplate 常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet 或 xlWBATWorksheet。如果省略此参数,Microsoft Excel 将创建包含一定数目空白工作表的新工作簿(该数目由 SheetsInNewWorkbook 属性设置)。 
  • 返回值
  • 一个代表新工作簿的 Workbook 对象。
  • 说明
  • 如果 Template 参数指定的是文件,则该文件名可包含路径。
     

1.2 workbooks.add 会自动打开一个“工作簿1”这类的wb文件,并activate之

  • workbooks.add 会自动生成一个 " 工作簿N" 的WB文件,且active
  • workbooks.add 在add后,会打开一个“工作簿1”这类的wb文件
  • 并且最后add的 wb文件 成为新的 activeworkbook
Sub test98()
   Workbooks.Add
End Sub

 

1.3 workbooks.add(template)

template  Variant 类型,可选

1.3.1   template如果指定为 EXCEL内置的常量

  • 可为以下 XlWBATemplate 常量之一
  • xlWBATChart
  • xlWBATExcel4IntlMacroSheet
  • xlWBATExcel4MacroSheet
  • xlWBATWorksheet
Sub test91()
    Workbooks.Add (xlWBATChart)
    Workbooks.Add (xlWBATWorksheet)
    Workbooks.Add (xlWBATExcel4MacroSheet)
    Workbooks.Add (xlWBATExcel4IntlMacroSheet)
End Sub

 

1.3.2 若 template指定为文本,文本是一个文件路径,文件必须先存在

(暂时没发现有什么用处)

template 如果本参数为指定一现有 Microsoft Excel 文件名的字符串,那么创建新工作簿将以该指定的文件作为模板

  • 如果template指定为文件,文件必须先存在,否则报错。
  • 那么template为一个路径
  • 如果是完整的绝对路径,则需要带path
  • 如果只是相对路径,那么 excel 2010版本会去这儿找这个文件:D\用户目录/我的文档下面 ,默认目录?
  • 好像指定过后会把新的路径当默认路径
Sub test96()
   Workbooks.Add (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx")
End Sub

Sub test97()
   Workbooks.Add (ActiveSheet.Name & ".xlsx")
End Sub

 

2 Workbooks.save 方法 

2.1 语法

  • Workbook.Save 方法 
  • 保存对指定工作簿所做的更改。
  • 语法
  • 表达式.Save
  • 表达式   一个代表 Workbook 对象的变量。
  • 说明
  • 要打开工作簿文件,请使用 Open 方法。
  • 要将工作簿标记为已保存,但不将其写入磁盘,请将它的 Saved 属性设置为 True。
  • 首次保存工作簿时,请使用 SaveAs 方法指定文件名。

 

2.2 常规保存

Sub test101()
   ActiveWorkbook.Save
   ThisWorkbook.Save
End Sub

 

2.3 新建文件的保存

  • workbooks.add 会自动生成一个 " 工作簿N" 的WB文件,且active
  • 如果只save 仍然只是保存在内存中
Sub test100()
   Workbooks.Add
   ActiveWorkbook.Save
   ActiveWorkbook.Save
End Sub
  • 新建wb文件,第一次保存在硬盘里需要saveas
  • saveas filename:=  完整的绝对路径
Sub test111()
   Workbooks.Add
'   ActiveWorkbook.Save
   ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
   ActiveWorkbook.Close
End Sub

 

2.3 保存所有打开的wb文件,然后退出EXCEL

  • 本示例保存所有打开的工作簿,然后关闭 Microsoft Excel。
  •  Application.Workbooks  只包括在内存中的wb文件
Sub test110()
'Visual Basic for Applications 官方例子
'官方例子不加 Dim w As Object 居然也能运行,原因不明白

For Each w In Application.Workbooks
   w.Save
Next w
Application.Quit

End Sub

 

  • 这样的没有官方的简洁,而且没退出EXCEL
Sub test112()

Dim wb As Object   '没这句也可以
For Each wb In Application.Workbooks
   wb.Save
   wb.Close
Next wb

End Sub

 

2.3.1 疑问?

  • for each w in application.workbooks
  • w确实不需要设置为对象,或workbook也没问题

 

3 workbooks().saveas

3.1 语法

  • Excel 开发人员参考 
  • Workbook.SaveAs 方法
  • 在另一不同文件中保存对工作簿所做的更改。
  • 语法
  • 表达式.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
  • 表达式   一个代表 Workbook 对象的变量。
  • 说明
  • 请使用同时包含大小写字母、数字和符号的强密码。弱密码不混合使用这些元素。强密码:Y6dh!et5。弱密码:House27。请使用您可以记住的强密码,这样就不必将它写下来。

 

参数

必选/可选数据类型说明
Filename可选Variant一个表示要保存文件的文件名的字符串。可包含完整路径,如果不指定路径,Microsoft Excel 将文件保存到当前文件夹中。
FileFormat可选Variant保存文件时使用的文件格式。要查看有效的选项列表,请参阅 XlFileFormat 枚举。对于现有文件,默认采用上一次指定的文件格式;对于新文件,默认采用当前所用 Excel 版本的格式。
Password可选Variant它是一个区分大小写的字符串(最长不超过 15 个字符),用于指定文件的保护密码。
WriteResPassword可选Variant一个表示文件写保护密码的字符串。如果文件保存时带有密码,但打开文件时不输入密码,则该文件以只读方式打开。
ReadOnlyRecommended可选Variant如果为 True,则在打开文件时显示一条消息,提示该文件以只读方式打开。
CreateBackup可选Variant如果为 True,则创建备份文件。
AccessMode可选XlSaveAsAccessMode工作簿的访问模式。
ConflictResolution可选XlSaveConflictResolution一个 XlSaveConflictResolution 值,它确定该方法在保存工作簿时如何解决冲突。如果设为 xlUserResolution,则显示冲突解决对话框。如果设为 xlLocalSessionChanges,则自动接受本地用户的更改。如果设为 xlOtherSessionChanges,则自动接受来自其他会话的更改(而不是本地用户的更改)。如果省略此参数,则显示冲突处理对话框。
AddToMru可选Variant如果为 True,则将该工作簿添加到最近使用的文件列表中。默认值为 False
TextCodepage可选VariantMicrosoft Excel 中对于所有语言都忽略此参数。
注释
当 Excel 将工作簿保存为某种 CSV 或文本格式(使用 FileFormat 参数指定)时,Excel 使用对应于当前计算机上使用的系统区域设置语言的代码页。在“控制面板”中单击“区域和语言”,再单击“位置”选项卡,在“当前位置”下可获得此系统设置。
TextVisualLayout可选VariantMicrosoft Excel 中对于所有语言都忽略此参数。
注释
当 Excel 将工作簿保存为某种 CSV 或文本格式(使用 FileFormat 参数指定)时,它按逻辑布局保存这些格式。如果文件中左至右 (LTR) 文本嵌在右至左 (RTL) 文本中,或者相反,那么逻辑布局将把文件的内容,按照文件中所有语言的正确阅读顺序保存,而不考虑方向。当应用程序打开文件时,每串 LTR 或 RTL 字符将根据代码页中的字符值范围,按照正确的方向呈现。(除非用来打开文件的应用程序是为显示文件的确切内存布局而设计的应用程序,如调试器或编辑器)。
Local可选Variant如果为 True,则以 Microsoft Excel(包括控制面板设置)的语言保存文件。如果为 False(默认值),则以 Visual Basic for Applications (VBA) 的语言保存文件。VBA 通常为美国英语版本,除非从中运行 Workbooks.Open 的 VBA 项目是旧的国际化 XL5/95

 

filename:= 可以带完整路径 或 是简单文件名不带后缀配合fileformat都可以

Sub test111()
   Workbooks.Add
'   ActiveWorkbook.Save
   ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
   ActiveWorkbook.Close
End Sub

 

创建后保存,且要求用户输入文件名后在 saveas

  • 官方例子
  • 本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。
  • 这里注意,输入的文件得是EXCEL类型的后缀名
Sub test113()

'Visual Basic for Applications 官方例子
Set NewBook = Workbooks.Add
Do
   fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName


End Sub

 

创建后保存,且要求用户输入文件名为.xlsx

  • 我拿官方的例子改的
  • 因为官方的例子在2010EXCEL里,直接保存,很可能会保存为一个后缀名不对的文件导致无法打开。
  • EXCEL的 workbook 文件
Sub test114()

Workbooks.Add
Do
  MsgBox "请输入完整的excel文件名,以.xlsx结尾"
  fname = Application.GetSaveAsFilename
Loop Until fname Like "*.xlsx"
ActiveWorkbook.SaveAs Filename:=fname
ActiveWorkbook.Close

End Sub

 

保存为EXCEL

  • fileformat:=xlExcel5 (xlExcel7 或 xlExcel8 ) 都保存的xls类型的,其他的很多不太好用

 

文件保存在哪儿?

  • 可以保存为绝对路径,且带后缀名
  • 也可以只保存为 文件名,会被认为是相对路径,保存在 thisworkbook.path 当前的路径下

 

文件的格式( filename 一次指定简洁,但应该 fileformat更准确)

  • 可以保存为绝对路径,且带后缀名
  • 也可以纯文件名,带后缀名
  • 也可以不带后缀名,由  fileformat 指定
  • 但是如果双重指定,要注意不要冲突
  • 比如文件名也带了后缀,fileformat 又指定了一次,应该以fileformat 为主,两者如果不一致会导致文件打不开。

 

密码

  • password   打开密码
  • writeprespassword  写的密码

 

Sub test116()

Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.xlsx", Password:=123, writerespassword:=456
wb1.Close

End Sub

文件名只写名字,格式后缀由fileformat指定的例子

Sub test117()

Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="111222333", FileFormat:=xlExcel8, Password:=123, writerespassword:=456
wb1.Close

End Sub

保存路径为绝对路径的例子

Sub test118()

Set wb1 = Workbooks.Add

wb1.SaveAs "c:\abc", FileFormat:=xlExcel5, Password:=123, writerespassword:=456
wb1.Close

End Sub

 

保存为csv

  • 保存为不同文件时,文件名和文件格式,需要一致
  • 另外,WB的属性,对于能保存的一些格式,可能不生下来,比如密码
  • csv就不能带密码
Sub test115()
Application.displayalert = False

Set wb1 = Workbooks.Add
'保存的文件名需要和 fileformat一致,或者只来1个
'csv本身是文本文件,不能加密
'直接保存为csv 只会有1个sheet
wb1.SaveAs Filename:="123.csv", FileFormat:=xlCSV, Password:=123
wb1.Close

Application.displayalert = True
End Sub

 

保存为TXT

  • 可见 .txt 对应的文件类型就是  效率  xlunicodeText
  • fileformat 设置格式更准确,比如保存为txt,最好还是把 fileformat指定为 xlunicodeText
Sub test122()

Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.txt"    '这样虽然保存为了txt,但打开会乱码
wb1.Close

End Sub

这样设置TXT的显示格式没问题

Sub test119()
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123", FileFormat:=xlUnicodeText
wb1.Close
End Sub
Sub test121()
Application.DisplayAlerts = flase
Set wb1 = Workbooks.Add
wb1.SaveAs Filename:="123.txt", FileFormat:=xlUnicodeText
wb1.Close
Application.DisplayAlerts = True
End Sub

 

4 workbooks().savecopyas(filename)  就1个参数

4.1 语法

  • Workbook.SaveCopyAs 方法 
  • 将指定工作簿的副本保存到文件,但不修改内存中的打开工作簿。
  • 语法
  • 表达式.SaveCopyAs(Filename)
  • 表达式   一个代表 Workbook 对象的变量。
  • 参数
  • 名称 必选/可选 数据类型 说明 
  • Filename 可选 Variant 指定副本的文件名。 

 


Sub test131()
'这样保存的后缀名会可以打开文件...    .xls
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xls"

End Sub


Sub test132()
'这样保存的后缀名会打不开文件...    .xlsx,得改成xlsm
'估计都是和EXCEL版本有关  xls保险一些,因为xls是老格式,可以包含xlsm里的 VBA

ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
End Sub


Sub test133()
'这样保存的后缀名会打不开文件...
'ThisWorkbook.SaveCopyAs (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx")

ThisWorkbook.SaveCopyAs (ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm")
end sub

 

5 保存后的文件打不开的问题

workbooks.saveas

  • 要么filename , 或fileformat 其中之一指定即可
  • 如果两者都指定了,要注意filename:=   fileformat:= 两者格式需要保持一致
  • 一般如果保存为  excel相关的,可以指定saveas 时加上文件类型  FileFormat:=xlOpenXMLWorkbook

 

workbooks.savecopyas

  • 如果是savecopyas ,必须是现在文件相同的格式(savecopyas 参数很少)
Sub test112()
   '必须保存为和当前thisworkbook.xlsm相同的文件类型,否则打不开
   '如果保存为了xlsx,使用时新文件就会提示打不开
   ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & "newWB2.xlsm"
End Sub

 

 

  • 14
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值