Excelmacros保存工作表

我完全是微软VBA的新手,我很难修复一个Excelmacros。

这个macros的意图是,按下一个button时,它会自动将活动工作表保存在文件上,但它不工作,我不知道为什么。

这对我来说似乎是正确的。

Sub Save() ' ' Save Macro ' Sheets("My_sheet").Select ChDir "C:\my_file" ActiveWorkbook.SaveAs Filename:=Range("B6"), FileFormat:=xlOpenXMLWorkbookMacroEnabled, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Sheets("My_sheet").Select ' End Sub 

只要表名被设置为“My_Sheet”,文件夹存在,文件名正确,似乎工作正常。 您可以在保存前检查它们是否正常。

 Sub SaveMe() Dim filename As String 'check if directory exist If Dir("C:\my_file", vbDirectory) = "" Then 'if not ask if it should be created and continued rspCreate = MsgBox("Directory doesn't exist, do you wish to create it and continue?", vbYesNo) If rspCreate = vbYes Then 'create dir and carry on MkDir "C:\my_file" ElseIf rspCreate = vbNo Then 'no selected, stop execution Exit Sub End If End If filename = Range("B6") Sheets("My_sheet").Select ChDir "C:\my_file" 'check if file name is valid If FileNameValid(filename) Then ActiveWorkbook.SaveAs filename:=Range("B6"), FileFormat:=xlOpenXMLWorkbookMacroEnabled, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Else MsgBox "Invalid file name, file not saved" End If Sheets("My_sheet").Select End Sub 'check if vali file name is used in cell Function FileNameValid(sFileName As String) As Boolean Dim notAllowed As Variant Dim i As Long Dim result As Boolean 'list of forbidden characters notAllowed = Array("/", "\", ":", "*", "?", "< ", ">", "|", """") 'Initial result = OK result = True For i = LBound(notAllowed) To UBound(notAllowed) If InStr(1, sFileName, notAllowed(i)) > 0 Then 'forbidden character used result = False Exit Function End If Next i FileNameValid = result End Function 

如果您尝试只保存工作表"My_sheet"作为新的工作簿,然后尝试这一点。

 Option Explicit Sub Save() Dim Sht As Worksheet Set Sht = ActiveWorkbook.Sheets("My_sheet") ' update sheet name ' Copy the sheet to a new workbook Sht.Copy ''' !Note: run time error if folder doesn't exist ChDir "C:\my_file" ''' !Note: run time error if "B6" contains invalid file name or is empty ' Save the copied sheet ActiveWorkbook.SaveAs FileName:=Sht.Range("B6"), _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, _ Password:="", _ WriteResPassword:="", _ ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub 

另请参阅如何避免在Excel VBAmacros中使用select

对于文件格式请参阅示例