2016-05-13 20 views
0

我寫了一些VBA代碼來查看工作表是否存在,以及它是否刪除它,然後恢復另一個代碼模塊。出於某種原因,我下面的代碼沒有做任何事情,我不明白爲什麼。刪除工作表(如果存在)代碼

Sub delete() 
    Dim ws As Worksheet 

    If worksheetexists("Export Worksheet") Then 
     Set ws = Worksheets("Export Worksheet")   
     Application.DisplayAlerts = False   
     ws.delete   
     Call GetData   
    Else 
     Call GetData 
    End If 

End Sub 

Public Function worksheetexists(sheetname As String, Optional wrkbk As Workbook) As Boolean 
    Dim wrksht As Worksheet 

    If wrkbk Is Nothing Then 
     Set wrkbk = ActiveWorkbook   
    End If 

    On Error Resume Next 

    Set wrksht = wrkbk.Worksheets(sheetname) 
    worksheetexists = (Err.Number = 0) 
    Set wrksht = Nothing 

    On Error GoTo 0 
End Function 
+1

該代碼看起來在語法上是正確的。你確定activeworkbook包含一個名爲「導出工作表」的表 – user3561813

+0

是的,這就是爲什麼我很困惑...我想知道如果我的代碼在錯誤的位置。我想要發生的是在一些其他代碼運行之前按下一個按鈕來運行它。 –

+0

我想我們應該縮小這個問題的範圍。我們可以先檢查'worksheetexists'是否返回true或false。也許你可以在'delete()'過程的'If'語句中包含'MsgBox'。如果''worksheexists'是真的,那麼'MsgBox'顯示True,否則顯示false。這樣,我們可以確定該功能是否發生故障。 – user3561813

回答

0

我稍微更新您的代碼:

Sub delete() 
    Dim ws As Worksheet 

    If worksheetexists("Export Worksheet") Then 
     Set ws = Worksheets("Export Worksheet") 
     Application.DisplayAlerts = False 
     ws.delete 
     Call GetData("pass") 
    Else 
     Call GetData("fail") 
    End If 

End Sub 

,並用它進行GetData()

Sub GetData(s) 
    MsgBox s 
End Sub 

它完美地工作同時爲失敗案件。檢查工作表名稱的拼寫............................ 特別是空格的數量。

+0

你在哪裏把代碼放在自己的模塊或工作簿中? –

+0

@BriannaCates我把所有的代碼放到一個標準模塊中。 –

+0

好的,那是我的地方,我也不知道爲什麼它不工作 –

0

@BriannaCates,功能波紋管爲我工作,也許適合你。

Public Function deleteWorksheet(sheet As String, Optional work As Workbook) As Boolean 
    Dim ws As Worksheet 
    Dim deleted As Boolean 

    If work Is Nothing Then 
     Set work = ThisWorkbook 
    End If 

    deleted = False 
    For Each ws In work.Worksheets 
     If ws.Name = sheet Then 
      ws.Delete 
      deleted = True 
      Exit For 
     End If 
    Next 

    deleteWorksheet = deleted 

End Function