Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 工作簿应自动保存为用户定义文件夹中的.xlsx文件,并关闭宏手册而不保存_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 工作簿应自动保存为用户定义文件夹中的.xlsx文件,并关闭宏手册而不保存

Vba 工作簿应自动保存为用户定义文件夹中的.xlsx文件,并关闭宏手册而不保存,vba,excel,excel-2010,Vba,Excel,Excel 2010,我录制了vba代码以进行一些条件格式设置。结果存储在工作簿本身中。现在我想强制用户不要保存工作簿,而是在代码运行后,它应该使用“另存为”自动将工作簿保存到非宏文件中,该文件使用一些唯一标识符,例如“yyyymmmdd,hhmm.xlsx”,它还应该询问用户保存到哪里 此外,它应在不保存工作簿的情况下关闭工作簿,并打开上次保存为的。xlsx文件。我找到了一些代码,但它们并不完全是我要找的。请帮忙。这个怎么样 Option Explicit Sub SaveAs() Dim sDate As

我录制了vba代码以进行一些条件格式设置。结果存储在工作簿本身中。现在我想强制用户不要保存工作簿,而是在代码运行后,它应该使用“另存为”自动将工作簿保存到非宏文件中,该文件使用一些唯一标识符,例如
“yyyymmmdd,hhmm.xlsx
”,它还应该询问用户保存到哪里

此外,它应在不保存工作簿的情况下关闭工作簿,并打开上次保存为的。
xlsx
文件。我找到了一些代码,但它们并不完全是我要找的。请帮忙。

这个怎么样

Option Explicit
Sub SaveAs()
    Dim sDate As String
    Dim FileName As String

    '// format Date
    sDate = Format(Now, "YYYYMMDD HHMM")

    '// Save As Name
    FileName = sDate

    '// Save path
    Application.Dialogs(xlDialogSaveAs).Show FileName
End Sub
将此代码添加到您的代码下面


每篇评论

这应该可以-在Excel 2010上测试

选项显式
子SaveAs()
Dim xlSaveAs As字符串
作为变量的路径
Application.ScreenUpdating=False
'//另存为名称
xlSaveAs=“周报-”&格式(现在为“YYYYMMDD HHMM”)&.xlsx
“//保存路径
Application.DisplayAlerts=False
xlPath=Application.GetSaveAsFilename(_
InitialFileName:=xlSaveAs_
FileFilter:=“Excel文件(*.xlsx),*.xlsx”_
标题:=“我的保存对话框”)
如果xlPath为False,则
ThisWorkbook.SaveAs xlPath,xlOpenXMLWorkbook
其他的
MsgBox“无效路径”//取消
如果结束
Application.DisplayAlerts=True
Application.ScreenUpdating=True
端接头


最后,您可能会发现MSDN中的文章很有帮助。

编辑:我重写了代码以实现您的愿望

Public Sub SaveNewFile()
    ' Create a new file basing the name of the current file (without extension if it's an xlsm) and the creation time
    Dim filename As String
    filename = ThisWorkbook.Path & "\" & CreateObject("scripting.filesystemobject").getbasename(ThisWorkbook.Name) & Format(Now, "yyyyMMdd hhmm") & ".xlsx"

    ' Save the file under the new name in xlsx format
    ' This action close the file and reopen it with the new name
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs filename:=filename, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
End Sub

您可以发布您尝试过的内容吗?若要关闭工作簿而不保存,请使用
thiswoolk.close SaveChanges:=False
(关于.close的完整文档)Nice@MaximePorté但我不认为OP想要关闭工作簿,如果我引用了这样的问题“另外,它应该关闭工作簿而不保存它,并打开最后保存为.xlsx文件”@MaximePortéyes
quote=在不保存工作簿的情况下关闭工作簿,然后打开上次保存的
,这样saveAs会将打开的工作簿替换为您刚刚保存的新工作簿。此代码有效!唯一的问题是,当提示用户另存为时,用户必须从下拉选项中选择另存为类型.xlsx。默认情况下,它显示.xlsm我尝试更改sDate=Format(现在是“YYYYMMDD HHMM”)和.xlsx”,但没有帮助,它仍然保存为.xlsm文件,除非用户选择“另存为类型为.xlsx”如何修复此问题?此代码也有效。但是,问题是,它不会通过打开对话框询问用户保存到哪里。我正在寻找的格式是“周报-yyyyMMdd hhmm.xlsx”,而不是提供路径thishworkbook.path,它应该使用一个简单的对话框询问用户路径,在这个对话框中可以选择路径,选择另存为操作的路径。谢谢你的帮助!
Public Sub SaveNewFile()
    ' Create a new file basing the name of the current file (without extension if it's an xlsm) and the creation time
    Dim filename As String
    filename = ThisWorkbook.Path & "\" & CreateObject("scripting.filesystemobject").getbasename(ThisWorkbook.Name) & Format(Now, "yyyyMMdd hhmm") & ".xlsx"

    ' Save the file under the new name in xlsx format
    ' This action close the file and reopen it with the new name
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs filename:=filename, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
End Sub