2017-10-11 23 views
0

以下是我在試圖刪除爲了節省,只有特定的工作表一個工作簿中的張數的代碼:如何確保VBA代碼將工作簿保存到聲明的文件路徑中?

Sub SeperateWB2() 

Dim ws As Worksheet 
Dim wb As Workbook 
Dim sheetname As Variant 
Dim ddl As Variant 

ddl = "PhaseTransferDropDowns" 
sheetname = InputBox("Please specify sheet name:") 
Path = "C:\My Documents\Phase Transfer\Test\" 

For Each ws In ThisWorkbook.Worksheets 'SetVersions 
    If Not ws.Name = sheetname And Not ws.Name = ddl Then 
    Application.DisplayAlerts = False 
     ws.Delete 
    End If 
Next ws 

wb.SaveAs Path & ws.Name & ".xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook 
     wb.Close 
     Set wb = Nothing 
End Sub 

迴路工作正常,但它拒絕拯救我有路徑上的工作簿指定。

我得到這個消息:「運行時錯誤91:對象變量或帶塊變量未設置」

誰能幫助?

+0

嘗試'PATH =「%USERPROFILE%\文件\相轉移\測試\」',但它可能取決於您的Windows版本,並且沒有錯誤控制,以確保路徑存在.. – Jeeped

+1

'設置wb = ActiveWorkbook'可能 – GibralterTop

+0

您最好將所需的工作表複製到任何位置。這將使用複製的工作表創建一個新的工作簿。然後使用'activeworkbook.saveas ....'。比刪除所有其他工作表更容易。 – Jeeped

回答

2

看看你的錯誤消息:對象變量或帶塊變量沒有設置

看起來你無法保存,因爲你從來沒有實例化wb變量。因此,wb = Nothing。什麼也不能執行SaveAs。嘗試添加Set wb = ThisWorkbook下方的聲明,如下所示:

'other code 
Dim ws As Worksheet 
Dim wb As Workbook 
Dim sheetname As Variant 
Dim ddl As Variant 

Set wb = ThisWorkbook 
ddl = "PhaseTransferDropDowns" 
'other code 
+0

Upvoted爲錯誤的很好的解釋,但它似乎OP想與'ThisWorkbook',它不一定是'ActiveWorkbook' - 因此'wb'甚至不需要。 –

+0

@ Mat'sMug同意。 'wb'可能只是爲了節省按鍵或由習慣創建。 – GibralterTop

1

wb對象變量從未被分配到比Nothing其他任何東西。但無論如何,你可以使用ThisWorkook,如果你的意思是保存並關閉包含運行代碼的工作簿:

With ThisWorkbook 
    .SaveAs Path & ws.Name & ".xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook 
    .Close 
End With 
0

謝謝大家!

看來我需要正確設置工作簿(Set wb = ThisWorkbook)。

我還需要將ws.name更改爲sheetname

這是在結束工作的代碼:

Sub SeperateWB2() 

Dim ws As Worksheet 
Dim wb As Workbook 
Dim sheetname As Variant 
Dim ddl As Variant 

Set wb = ThisWorkbook 

ddl = "PhaseTransferDropDowns" 
sheetname = InputBox("Please specify sheet name:") 
Path = "C:\My Documents\Phase Transfer\Test\" 

For Each ws In ThisWorkbook.Worksheets 'SetVersions 
    If Not ws.Name = sheetname And Not ws.Name = ddl Then 
    Application.DisplayAlerts = False 
     ws.Delete 
    End If 
Next ws 

wb.SaveAs Path & sheetname & ".xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook 
     'wb.Close 

End Sub 
相關問題