使用以下代码复制主工作表上的某些数据,然后添加新工作簿,然后粘贴数据。然后我需要提示使用msoFileDialogSaveAs,因为我需要用户每次都能选择不同的文件类型。
问题是,当框出现以保存文件时,我可以键入一个名称然后点击保存,但它实际上并没有写入文件。
Public Sub ArchiveSheet()
Dim NewBook As Workbook
Dim CopyRange As Range
Set CopyRange = ActiveSheet.UsedRange
Dim lngCount As Long
CopyRange.Cells.Copy
Set NewBook = Workbooks.Add
Range("A1").PasteSpecial Paste:=xlPasteValues
With NewBook
.Title = "Archive"
End With
With Application.FileDialog(msoFileDialogSaveAs)
.Show
End With
Application.CutCopyMode = False
End Sub
答案 0 :(得分:1)
您目前要求用户指出他/她想要保存文件的位置。但你没有使用它。您需要保存返回字符串,如下所示:
dim strFileSelected as String
strFileSelected = Application.GetSaveAsFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Save Excel file...")
之后,您可以检查用户是否确实为您提供了路径和文件名以将其保存到:
If strFileSelected = "False" Then
MsgBox "You have cancelled"
else
MsgBox "Saving file here:" & chr(10) & strFileSelected
ThisWorkbook.SaveAs Filename:=strFileSelected, FileFormat:=xlWorkbookNormal
End If
请注意,您无法使用任何类型的文件扩展名保存所有Excel文件。示例:如果您打开了一个打开的XML格式的Excel文件并尝试使用.xls
扩展名进行保存,那么您可能会收到一条错误消息,并且您将丢失附加到的任何类型的VBA代码该文件(如果您忽略错误消息)。
简而言之:您可能希望详细说明上述解决方案,以确保文件格式与使用Debug.Print ThisWorkbook.FileFormat
的所选扩展名匹配。