根据属性查找单元格

时间:2014-04-17 14:39:52

标签: vba

我需要在工作表中找到一个单元格,但我想避免查找字符串。

我遇到的问题是我的客户将编辑工作表。如果他决定在好的之前写下我要找的字符串,应用程序就会崩溃。

Sub FindSpecificCell()
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Sheets("TP 1")
    Dim myRange As Range
    Dim rangeFinal As Range
    Set monRange = ws.Range("A:AJ")

    Set rangeFinal = myRange.Find("Description du test")
    Debug.Print " "
    Debug.Print "Looking for ""Description du test"" in TP 1 "
    Debug.Print "column : " & rangeFinal.Column
    Debug.Print "row : " & rangeFinal.Row

End Sub

有没有办法在单元格中插入一种属性,以确保我能够处理好的属性?

1 个答案:

答案 0 :(得分:2)

您无法直接将属性与特定单元格关联,但您可以使用工作表中的属性来存储此信息。我之前使用过这样的几种方法:

'Set the provided value of the custom property with the provided name in the provided sheet.
Private Sub SetCustomPropertyValue(InSheet As Worksheet, WithPropertyName As String, WithValue As Variant)
    Dim objCP As CustomProperty
    Dim bolFound As Boolean
    bolFound = False 'preset.

    For Each objCP In InSheet.CustomProperties
        'if this property's name is the one whose value is sought...
        If (StrComp(objCP.Name, WithPropertyName, vbTextCompare) = 0) Then
            objCP.Value = WithValue
            bolFound = True
            Exit For
        End If
    Next

    'if the property didn't already exist on the sheet, add it.
    If (Not bolFound) Then Call InSheet.CustomProperties.Add(WithPropertyName, WithValue)
End Sub

'Return the value of the custom property with the provided name in the provided sheet.
Private Function GetCustomPropertyValue(InSheet As Worksheet, WithPropertyName As String) As Variant
    Dim objCP As CustomProperty
    GetCustomPropertyValue = Empty

    For Each objCP In InSheet.CustomProperties
        'if this property's name is the one whose value is sought...
        If (StrComp(objCP.Name, WithPropertyName, vbTextCompare) = 0) Then
            GetCustomPropertyValue = objCP.Value
            Exit For
        End If
    Next
End Function

然后你可以做这样的事情来写和读回值:

Sub test()
    Dim strPropName As String
    strPropName = "MyRange_" & Selection.Address
    Dim strWhatIWantToStore As String
    strWhatIWantToStore = "Here's what I want to store for this range"

    Call SetCustomPropertyValue(ActiveSheet, strPropName, strWhatIWantToStore)
    MsgBox GetCustomPropertyValue(ActiveSheet, strPropName)
End Sub