在所有工作表VBA上规范化标题

时间:2018-02-12 08:32:10

标签: excel vba excel-vba

我是VBA的新手并且一直在玩基础知识。

我的任务是根据标题和列的数据从某一行中提取数据。例如,如果标题下的列" ENG JOBSCOPE" <> ""然后提取该数据的行。

但是,当我的宏循环通过所有工作表时,如果我想使用range.find找不到的条件找不到,那么它会给我一个错误91。

我已经阅读了有关使用标准化的信息,但我似乎无法使其正常工作。

目前我正在使用此代码

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

&#34; ENG JOBSCOPE&#34;是标题。但是,有些工作表包括&#34; ENG JOB SCOPE&#34;。

是否有另一种方法可以用来制作它,以便它能找到列号而不管它们之间的空间或大小写?

此外,某些工作表并不包含&#34; ENG JOBSCOPE&#34;。有没有办法让代码继续搜索而不停止错误91? 我接下来尝试使用错误转到goto,但数据混乱了。

我希望我输入的内容足够或足够清晰。如果不够清楚,请告诉我输入该论坛需要输入的内容。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

使用通配符。

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

如果希望Find无论大小写是否正常工作,请键入MatchCase:= False。