macroserror handling

我使用Excel中的“loggingmacros”button创build基本的macros。 然后我编辑,使macros做我想做的事情。

在这种情况下,我手动打开master.xlsx文件。 然后我运行一个名为week12的master.xlsxmacros。

此macros打开名为Grant.xlsx的文件,复制单元格H16的内容,然后将内容粘贴到master.xlsx单元格N3中。

我遇到的问题是,如果文件不存在,我得到一个消息说,该文件无法find,然后我得到一个运行时错误“1004”。

macros的目的是打开40个不同的电子表格,复制一个单元格的内容并粘贴到master.xlsx中。 40个文件中的任何一个或多个可能会丢失。 下面的macros示例只显示了40中的2个macros。

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 

尝试以下,你需要适应你的需求,虽然。

 '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 

我不能build立一个完整的工作环境,但是你的代码中有一些明显的地方可以循环使用。 名字的集合可以被塞进一个大的数组中,这提供了循环的范围。 对于每次迭代,在打开工作簿的文件夹名称中使用新名称。

 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) '<~~ eg 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的值或零值都是在同一个地方,所以我设置了一个variables为0,并且只有在一切按计划进行时才会覆盖该variables。 无论如何,通过循环的迭代,该值被写入到从N3偏移的单元中。

我不完全确定H16的价值是从哪里来的,所以我简单地select了Worksheets(1)