[VBA ] if函數判斷錯誤?

看板Visual_Basic作者 (踢屁屁)時間5年前 (2018/11/27 20:02), 編輯推噓1(104)
留言5則, 1人參與, 5年前最新討論串1/1
各位大大好 延續上次的問題 (文章代碼: #1RzhUY6f ) 這次需要"先判斷工作表是否存在" 如果存在,則跳過(即繼續執行迴圈) 如果不存在,則新增該工作表 不知道是不是因為使用了 On Error Resume Next 導致全部皆判定為"工作表存在",以至於無法新增@@ 請問這該怎麼解決? ------------------------------我是程式碼------------------------------ Sub skip_sheet() mydir = ActiveWorkbook.Path abook = ActiveWorkbook.Name asheet = ActiveSheet.Name Set fs = Application.FileSearch With fs .LookIn = mydir .Filename = "*.lod" If .Execute(msoSortByFileName) Then Nfile = .FoundFiles.Count End If MsgBox ("Nfile = " & Nfile) s = "" For i = 1 To Nfile s = s & .FoundFiles(i) & Chr(10) Next i MsgBox (s) sheetname = "" For i = 1 To Nfile Workbooks.OpenText Filename:=.FoundFiles(i), DataType:=xlDelimited, Tab:=True, comma:=True, Space:=True actb = ActiveWorkbook.Name acts = ActiveSheet.Name Workbooks(actb).Sheets(acts).Activate sheetname = Right(.FoundFiles(i), 10) sheetname = Left(sheetname, 6) Range("A1").Select Selection.Copy Workbooks(abook).Activate On Error Resume Next Set ws = Sheets(sheetname) If ws Is Nothing Then MsgBox ("New Sheet! " & .FoundFiles(i)) Sheets.Add.Name = sheetname 'MsgBox ("Sheet " & sheetname & " Added") Workbooks(abook).Sheets(sheetname).Activate Range("A1").Select ActiveSheet.Paste Else MsgBox ("Old Sheet! " & .FoundFiles(i)) Workbooks(abook).Sheets(asheet).Activate Range("A1").Select End If Workbooks(actb).Activate Application.CutCopyMode = False Workbooks(actb).Close Next i End With End Sub ------------------------------我是參考圖片------------------------------ https://imgur.com/QAHflPp
https://imgur.com/HBufdcA
https://imgur.com/bu1OGcc
https://imgur.com/3EtLUMQ
https://imgur.com/hOD798N
https://imgur.com/AY4wxy0
https://imgur.com/Elv35kb
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.110.47.249 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1543320171.A.175.html

11/28 23:46, 5年前 , 1F
因為set ws那行跳錯誤,所以ws代表的物件沒有被改變
11/28 23:46, 1F

11/28 23:46, 5年前 , 2F
試試看在前面加一行Set ws = Nothing
11/28 23:46, 2F

11/28 23:51, 5年前 , 3F
另外也可以考慮把"檢查工作表是否存在"寫成一個function
11/28 23:51, 3F

11/28 23:52, 5年前 , 4F
要傳回布林值或該工作表都可以,這樣好處是error handler
11/28 23:52, 4F

11/28 23:52, 5年前 , 5F
不會互相干擾,整個程式流程看起來會比較順
11/28 23:52, 5F
文章代碼(AID): #1R_J9h5r (Visual_Basic)
文章代碼(AID): #1R_J9h5r (Visual_Basic)