2016-09-21 7 views
1

Я совершенно не знаком с Microsoft VBA, и у меня возникают проблемы с исправлением макроса Excel.Excel Macro, который сохраняет рабочий лист

Целью этого макроса является то, что при нажатии кнопки он автоматически сохраняет активный лист в файле, но он не работает, и я не знаю, почему.

Это кажется правильным для меня.

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

Что не работает? Вы получили сообщение об ошибке? Что находится в 'Range (" B6 ")'? – Comintern

+0

Я получаю сообщение об ошибке «Листы (« My_sheet »). Выберите« часть этого макроса, и я не могу сохранить рабочий лист. 'Range (" 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

Смежные вопросы