2015-12-03 46 views
2

我使用Excel中的「記錄宏」按鈕創建基本宏。然後我進行相應的編輯,以使宏執行我正在嘗試執行的操作。宏錯誤處理

在這種情況下,我手動打開master.xlsx文件。然後我運行一個名爲week12的master.xlsx宏。

這個宏打開一個名爲Grant.xlsx文件,複製單元H16中的內容,然後粘貼內容到master.xlsx細胞N3。

我遇到的,如果文件不存在,我得到一個消息,說文件找不到,然後我得到一個運行時錯誤「1004」的問題。

宏的目的是打開40分不同的塗抹片和複製單元格中的內容並將其粘貼到master.xlsx。 40個文件中的任何一個或多個可能會丟失。下面僅宏示例顯示了的40

Sub Week12() 
    ' 
    ' Week12 Macro 
    ' 
    ' Grant 

    ' 
     If Err.Number > 0 Then 
     Err.Clear 
     End If 

     On Error GoTo 3 

     Sheets("SCORES").Select 
     Range("A1").Select 
     ChDir _ 
      "K:\\\Grant" 
     Workbooks.Open Filename:= _ 
      "K:\\\\Week 12.xlsx" 
     Range("H16").Select 
     Selection.Copy 
     Windows("Master.xlsb").Activate 
     Range("N3").Select 
     ActiveSheet.Paste 
     Range("A1").Select 
     Windows("Week 12.xlsx").Activate 
     ActiveWindow.Close 
     GoTo 4 
    3: 
    'if the file is missing put a O in N3 

     Range("N3").Select 
     ActiveCell.FormulaR1C1 = "O" 
     Range("A1").Select 
     If Err.Number > 0 Then 
     Err.Clear 
     End If 
    4: 
    ' Adele 

     On Error GoTo 5 

     Sheets("SCORES").Select 
     Range("A1").Select 
     ChDir _ 
      "K:\\\\Adele" 
     Workbooks.Open Filename:= _ 
      "K:\\\\Adele\Week 12.xlsx" 
     Range("H16").Select 
     Selection.Copy 
     Windows("Master.xlsb").Activate 
     Range("N4").Select 
     ActiveSheet.Paste 
     Range("A1").Select 
     Windows("Week 12.xlsx").Activate 
     ActiveWindow.Close 
     GoTo 6 
    5: 
    'if the file is missing put a O in N4 
     Range("N4").Select 
     ActiveCell.FormulaR1C1 = "O" 
     Range("A1").Select 
     If Err.Number > 0 Then 
     Err.Clear 
     End If 
    6: 
    ' Stuart Manvell 

    'and so on and so on for all 40 names 
end sub 
+0

這是一個非常長篇大論對其進行編碼的方式。是否存在文件存儲位置,複製信息和粘貼位置的模式?即它們全部在同一個文件夾中,它是否總是被複制的單元格H16?例如,如果主文件的第1行具有要導入的文件的名稱,即A1 =「Grant」,B1 =「Adele」,那麼很容易讓代碼查看行中的每個名稱1,打開該工作簿並粘貼下面的結果,或打開某個文件夾中的每個XL文件並將其內容複製出來。 –

回答

2

2宏觀嘗試以下方法,你需要,雖然,以使其適應您的需求。

'Some Other Script here 


'Ignore errors to allow for error evaluation 
On Error Resume Next 

ExcelFilePAth = "INSERT FILE PATH HERE" 

'YAYAYA is just a random name 
'Purpose is to generate an error if the File Path doesnt exisit 
YAYAYA = GetAttr(ExcelFilePAth) 

Select Case Err.Number 

'If the File Path is valid the Error Number should be 0 
'Else it will present an error message and then continue 

    Case Is = 0 

     'Insert your Script for processing the Excel Sheets Here 

    Case Else 


     'Insert what to do here 

     MsgBox "The File path below doesnt exisit:" & vbNewLine & _ 
       vbNewLine & _ 
       ExcelFilePAth 

End Select 

'Resume error checking 
On Error GoTo 0 

'Some Other Script here 
1

我不能設置整個工作環境,但是在代碼中有一些明顯的區域可以循環使用程序。名字的集合可以被塞進一個大的數組中,這提供了循環的範圍。對於每次迭代,在打開工作簿的文件夾名稱中使用新名稱。

Sub anyWQeek() 
    Dim thisWeek As Long 
    thisWeek = 12 '<~~ used below as Week & wk 
    Weekly wk:=thisWeek 
End Sub 

Sub Weekly(Optional wk As Long = 1) 
    Dim v As Long, vNAMEs As Variant, var As Variant 
    Dim nwb As Workbook, twb As Workbook 

    Set twb = ThisWorkbook 

    vNAMEs = Array("Grant", "Adelle", "Stuart", "Manville", _ 
        "abc", "lorem", "ipsum", "blah", _ 
        "blah-blah", "blah-blah-blah", "blh", "blah2") 
        'and so on and so on for all 40 names 

    On Error GoTo bm_NextWorkbook 

    For v = LBound(vNAMEs) To UBound(vNAMEs) 
     var = 0 
     ChDir "K:\\\" & vNAMEs(v) '<~~ e.g. Grant 
     Set nwb = Workbooks.Open(Filename:="K:\\\" & vNAMEs(v) & "\Week " & wk & ".xlsx", ReadOnly:=True) 
     var = nwb.Worksheets(1).Range("H16").Value 
     nwb.Close savechanges:=False 
bm_NextWorkbook: 
     twb.Sheets("SCORES").Range("N3").Offset(v, 0) = var 
    Next v 

End Sub 

零或H16值要去同一個地方,所以我一個變體設置爲,只有推翻該變種按照計劃一切順利。無論如何,通過循環的迭代,該值被寫入到從N3偏移的單元中。

我不能完全確定什麼工作表從H16的值從如此,我只是選擇了Worksheets(1)到來。

+0

是的,我沒有編碼經驗,所以我只是先給它,如你所說這是一個非常長的方法。一般而言,我會放棄它,因爲它只是幫助我完成工作,沒有其他人使用它們。這需要我花一點時間來了解你的所有幫助。當我拿到它時,我會回來的,但相信你的耐心可能會被測試。非常感謝 – Itried