我想做什么
找到标题单元格包含唯一字符串的列。换句话说,我知道单元格的文本,我知道单元格在第1行,但我不知道哪个列。注意:我想搜索整个文本,而不仅仅是其中的一部分。注意2:文本可能有所不同,因此我无法将值硬编码到我的代码中。相反,我需要使用存储值的变量。
问题
如果标题文字中没有回车符,则简单的newCol = Range("1:1").Find(headerText).Column
可以正常工作。但是,如果有回车,这不起作用。它会抛出错误"对象变量或With块变量未设置"。这是我的确切标题字符串:
Incomplete Email
(more text)
我已尝试过的内容
我也尝试使用WorksheetFunction.Match(headerText, Range("1:1"), 0)
,但遇到了同样的问题。
附加说明和要求
这是插件的一部分,所以我不想在用户的Excel工作表中更改任何内容(如果我不需要)(即,我不要想要删除回车符。)
从技术上讲,我在一个函数中执行此操作:
Public Function getColumn(headerText As Variant)
getColumn = Range("1:1").Find(headerText).Column
End Function
谢谢!
答案 0 :(得分:1)
请尝试使用以下代码
get()
答案 1 :(得分:1)
这就是:带有和不带换行符的文本不是同一个文本,因此.Find
失败。你应该做的是模式查找。我刚刚测试了它并且它可以工作,前提是如果没有换行符,那么应该有一个空格:
Sub test()
Dim rex As RegExp, ran As Range
Dim col As Integer, headerText As String
'read you headerText here
Set rex = New RegExp
rex.Pattern = RegexIt(headerText)
For Each ran In Range("1:1")
If rex.test(ran.Text) Then
col = ran.Column
Exit For
End If
Next ran
MsgBox col
End Sub
Function RegexIt(what As String) As String
what = Replace(what, "(", "\(")
what = Replace(what, ")", "\)")
what = Replace(what, "[", "\[")
what = Replace(what, "]", "\]")
what = Replace(what, "<", "\<")
what = Replace(what, ">", "\>")
what = Replace(what, " ", "[\n ]?")
what = Replace(what, vbCrLf, "[\n ]?")
End Function
祝你好运!
编辑:需要参考Microsoft VBScript正则表达式5.5
编辑2:已编辑以供变量使用。说明:使用optionel空格/换行符替换变量值中的空格,使用转义括号进行模式匹配。
答案 2 :(得分:0)
即使标题单元格包含回车符,您的代码也应该有效:
Sub FindColumnWithTextInRowOne()
Dim headerText As String, newCol As Long
headerText = "whatever"
newCol = Range("1:1").Find(headerText).Column
MsgBox newCol
End Sub
这是因为您使用 Find()并不需要匹配单元格的WHOLE内容。
修改#1:强>
如果标题单元格是使用公式构造的,则应使用略有不同的Find()
:
Sub FindColumnWithTextInRowOne()
Dim headerText As String, newCol As Long, r As Range
headerText = Range("H1").Text
newCol = Range("1:1").Find(What:=headerText, LookAt:=xlWhole, LookIn:=xlValues).Column
MsgBox newCol
End Sub