我正在使用一个函数,该函数为我提供了在其中找到一个值的列。我在完成它时遇到了困难......但我成功了!
不管你信不信,错误是 Find 方法在查找宽度太小的单元格中的值时出现问题......这会这么愚蠢吗?
这是打电话..
Private Sub CommandButton3_Click()
Direccion = BuscarCol(2)
MsgBox "the cell address is " & Direccion
End Sub
Run Code Online (Sandbox Code Playgroud)
这就是功能...
Function BuscarCol(Fecha As Integer) As String
Dim RangoFech As Range
With Sheets("REGISTRO").Range("A1:IN1")
Set RangoFech = .Find(What:=Fecha, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If Not RangoFech Is Nothing Then
BuscarCol = ConvertToLetter(RangoFech.Column)
End If
End With
End Function
Run Code Online (Sandbox Code Playgroud)
哦,我还有一个用于将列号转换为字母的方法,但这从来都不是问题。
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
那么……你能告诉我这是否正确吗?Find方法有这个问题吗?
如果您在“查找”框中选择“查找范围:值”,则它将仅查找可见的值。如果该列被隐藏,它将找不到它。如果该列太窄而无法显示该值,而是显示 ###,则不会找到该值。即使您将单元格格式设置为;;;有效隐藏该值,它也不会找到它。
如果您选择查找:公式,它将在所有这些情况下找到它。
但是,如果您有一个生成值的公式,并且该值不存在于公式文本中,则它不会找到它。所以=200+22在一个单元格中,你搜索222
这似乎是一个奇怪的设计决定。我的理论是算法使用该Range.Text属性。该属性返回单元格中可见的内容,例如窄列的 ###,而不是.Value或.Value2。