【问题标题】:Error handling in collection environment采集环境中的错误处理
【发布时间】: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 ErrorHandlerErrorHandler: Next 的解决方案在一次插入的列不超过 1 个时有效(例如,2 个或更多插入的列彼此跟随会返回错误)。如果插入的列在输出表的开头或结尾,它也不起作用。

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

【问题讨论】:

  • 您必须使用Resume 语句来清除引发的错误。
  • @Rory:你的意思是On Error Resume Next吗?因为这会将下一个输入列的值复制到输出表中的插入列中。可能我没理解你的意思。

标签: vba excel


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 2023-03-22
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多