我有一个宏,它使用存储在集合中的标题名称将输入表的内容复制到输出表。代码:
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个或更多列,则返回错误)。如果插入的列位于输出表的开头或末尾,它也不起作用。
我想要做的是:如果在集合中找到标题,请复制&粘贴输入表中的数据,如果在集合中找不到标题,则转到下一个标题,如果下一个标题为空,则停止宏。
答案 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