集合环境中的错误处理

时间:2015-11-02 10:40:28

标签: excel vba excel-vba

我有一个宏,它使用存储在集合中的标题名称将输入表的内容复制到输出表。代码:

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

我现在尝试处理错误,如果我在输出表中插入一个列,其中一个标题未包含在输入表的标题集合中。

我的解决方案On Error GoTo ErrorHandler然后ErrorHandler: Next,如果一次插入的列数不超过1个(例如,插入的列之后插入2个或更多列,则返回错误)。如果插入的列位于输出表的开头或末尾,它也不起作用。

我想要做的是:如果在集合中找到标题,请复制&粘贴输入表中的数据,如果在集合中找不到标题,则转到下一个标题,如果下一个标题为空,则停止宏。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

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