2016-09-21 120 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