为什么Range.Find只适用于某些列名? VBA

时间:2017-06-21 15:45:40

标签: excel vba excel-vba

目标是搜索特定的列标题。在这种情况下,“付费到日期”(仅限完全匹配)并在其前面插入一个新列并命名。 即使它在那里,这个公式也不会拿起列。但是如果我将查找(what:=“付费到日期”)更改为另一列,例如“关闭日期”..它的工作原理..然后我试过其他专栏和一些工作,有些不... ..想弄清楚这是什么原因?

 Sheets(NewSheet).Select
    Set ColHeaders = Range("A4:CD4").Find(What:="Paid to Date", LookIn:=xlValues, LookAt:=xlWhole)
    If ColHeaders Is Nothing Then
    MsgBox "Paid to Date Column was not found."
    Exit Sub
    Else
    Columns(ColHeaders.Column).Insert
    Cells(4, ColHeaders.Column - 1).Value = "Paid On " & Month(Range("D2")) & "/" & Day(Range("D2"))

1 个答案:

答案 0 :(得分:0)

使用application.match代替更可靠的字符串位置。

dim var as variant
with workSheets(NewSheet)
    var = application.match("Paid to Date", .rows(4), 0)
    if not iserror(var) then
         .columns(var).entirecolumn.insert
         .cells(4, var) = format(.cells(2, "D"), "\P\a\i\d \O\n mm/dd")
    end if
end with

在原始代码中,您没有为.Find操作提供足够的参数来克服用户可能已更改的设置(并且正在继承到VBA操作中。