【发布时间】:2015-11-02 10:40:28
【问题描述】:
我有一个宏,它使用存储在集合中的标题名称将输入表的内容复制到输出表。代码:
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 个或更多插入的列彼此跟随会返回错误)。如果插入的列在输出表的开头或结尾,它也不起作用。
我想做的是:如果在集合中找到标题,则从输入表中复制并粘贴数据,如果在集合中找不到标题,则转到下一个标题,如果下一个标题是为空,停止宏。
【问题讨论】:
-
您必须使用
Resume语句来清除引发的错误。 -
@Rory:你的意思是
On Error Resume Next吗?因为这会将下一个输入列的值复制到输出表中的插入列中。可能我没理解你的意思。