2016-09-21 94 views
1

我完全不熟悉Microsoft VBA,并且遇到修复Excel宏的问题。保存工作表的Excel宏

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

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

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 
+0

什么不起作用?你有错误吗?范围(“B6”)中有什么? – Comintern

+0

我收到一个错误,其中突出显示“表格(”My_sheet“)。选择”这个宏的一部分,我不能保存工作表。 '范围(“B6”)'这是一个写一个名字的单元格。这个名称需要是保存文件的名称。 – Rods2292

+2

我假设你有一张名为“My_sheet”的工作表?什么是错误? – Comintern

回答

0

似乎很好,只要工作,因为工作表名称设置为 “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 
-1

如果你想只保存表"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 

另见How to avoid using Select in Excel VBA macros

For File Format See Examples

+0

'Sht.Copy'的目的是什么?所有这一切都是爆炸剪贴板上的任何东西。 – Comintern