收集环境中的error handling

我有一个macros使用存储在集合中的头名称将input表的内容复制到输出表。 码:

Sub Process_Data() Dim rawSht As Worksheet Dim procSht As Worksheet Dim headers As Collection Dim c As Integer Dim v As Variant Set rawSht = ThisWorkbook.Worksheets("Backend - raw") Set procSht = ThisWorkbook.Worksheets("Backend - processed") Set headers = New Collection For c = 1 To rawSht.Cells(4, Columns.Count).End(xlToLeft).Column headers.Add c, rawSht.Cells(4, c).Text Next For c = 5 To 50 On Error GoTo ErrorHandler rawCol = headers(procSht.Cells(8, c).Text) v = rawSht.Range(rawSht.Cells(5, rawCol), rawSht.Cells(Rows.Count, rawCol).End(xlUp)).Value2 procSht.Cells(9, c).Resize(UBound(v, 1)).Value = v ErrorHandler: Next End Sub 

我现在试着去处理这个错误,如果我要在输出表中插入一个列,并且在input表的标题集合中没有包含一个标题。

我的解决方法是使用On Error GoTo ErrorHandler ,然后使用ErrorHandler: Next如果每次插入的列不超过1个(例如,两个或多个插入的列之后的对方返回错误)。 如果插入的列在输出表的开头或结尾,也不起作用。

我想要做的是:如果在集合中find标题,复制并粘贴input表中的数据,如果在集合中找不到标题,则转到下一个标题,如果下一个标题为空,则停止macros观。

你可以做这样的事情:

 For c = 5 To 50 rawCol = vbNullString On Error Resume Next rawCol = headers(procSht.Cells(8, c).Text) On Error Goto 0 if rawcol <> vbnullstring then v = rawSht.Range(rawSht.Cells(5, rawCol), rawSht.Cells(Rows.Count, rawCol).End(xlUp)).Value2 procSht.Cells(9, c).Resize(UBound(v, 1)).Value = v End If Next