【问题标题】:Normalise Header on all worksheets VBA规范化所有工作表VBA上的标题
【发布时间】:2018-02-12 16:39:17
【问题描述】:

我是 VBA 新手,一直在玩基础知识。

我的任务是根据标题和列的数据从某一行中提取数据。例如,如果标题“ENG JOBSCOPE”“”下的列,则提取该数据的行。

但是,当宏循环遍历所有工作表时,如果我想使用 range.find 查找的条件找不到,我会遇到错误 91。

我已经阅读了有关使用 normalize 的信息,但我似乎无法使其工作。

目前我正在使用此代码

J = 1

For Each ws In x.Worksheets

     For Each wks In y.Worksheets

       With x.Worksheets(ws.Name)
         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
       End With

    For i=2 to Lastrow

     EJOB = Range("A1:DE1").Find(What:="ENG JOBSCOPE", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False).Column
     'Error 91 comes from the above line ^^^

       EJobs = ws.Cells(i, EJOB).Value

     If EJobs <>  "" then
          x.Sheets("ID").Rows(i).Copy
          y.Sheets("ID").Range("A" & j).PasteSpecial Paste:=xlPasteValues
          Application.CutCopyMode = False
          J=J+1

     End if
    Next i
   Next wks
  Next ws
 End sub

“ENG JOBSCOPE”是一个标题。但是,有些工作表由“ENG JOB SCOPE”组成。

是否有另一种方法可以让我使用它来找到列号,而不管它们之间的空格或大小写如何?

此外,某些工作表不包含“ENG JOBSCOPE”。有没有办法让代码继续搜索而不会因错误 91 而停止? 我尝试过使用 on error goto next,但数据变得混乱。

我希望我输入的内容足够或足够清晰。如果不够清楚,请告诉我需要输入什么,因为我是这个论坛的新手。

非常感谢您!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    使用通配符。

    EJOB = Range("A1:DE1").Find(What:="ENG*JOB*SCOPE", LookIn:=xlValues, _
        LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False).Column
    

    如果您希望 Find 工作而不考虑大小写,请输入 MatchCase:=False。

    【讨论】:

    • 嗨!谢谢你的快速反应。它似乎正在从另一个标题中取出信息,因为还有另一个标题为“CP ENG JOBSCOPE”。我是否只想从“ENG JOBSCOPE / ENG JOB SCOPE”中搜索?
    • 我已经测试过了,“CP ENG JOBSCOPE”没有被选中。 What:="ENGJOBSCOPE" 表示单元格中的值必须以“ENG”开头。
    • 哦,是的,我意识到我的错误是我隐藏的列是错误的。它工作得很好!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2014-09-23
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多