簡體   English   中英

Excel VBA .Find功能在選擇中更改值

[英]Excel VBA .Find Function changing values in selection

Heya這可能很簡單,但我無法弄清楚出了什么問題。

我正在嘗試為特定日期執行.find並將該選擇更改為用戶輸入日期。

我有一個userform從組合框中選擇一個日期(date1_cbo)。 組合框源鏈接到工作表(后端)上的日期。 下面有一個文本框,用於編寫新日期以將其更改為(date1_txt)。 我一直在收到錯誤

對象變量或未設置塊變量。

我試過幾個選項但沒有運氣這里是我的代碼:

Dim selection As Range
Dim check As Boolean

'input box validation
check = IsDate(date1_txt.Value)
If check = True Then
    'find cell matching combobox
    With Worksheets("Backend").Range("A1:A500")
        Set selection = .Find(date1_cbo.Value) 'this is the problem
        selection.Value = date1_txt.Value
    End With
Else
End If

有趣的是.Find返回范圍或Nothing。 然而,因為組合框與我正在搜索的細胞相關聯,所以永遠不會返回任何內容......我不明白錯誤發生的原因。

一個名為“選擇”的變量是錯誤的編碼實踐,但完全合法。 為清楚起見,請勿使用此類名稱。


當您嘗試從null對象讀取屬性( .value )時,會導致錯誤91。 您的選擇變量為空,因為工作表和組合框上的日期格式不同。


只需在嘗試在工作表中找到它之前轉換為日期。 Set selection = .Find(CDate(date1_cbo.Value)) '/ once again, selection is valid but bad name for variable.

您正在使用名為Selection的變量。 VBA也使用它。 將您的變量重命名為其他任何內容,重寫您的代碼,它應該工作。 甚至Selection1都很好:

Public Sub TestMe()

    Dim selection1 As Range
    With Worksheets(1).Range("A1:A500")
        Set selection1 = .Find("vi")
    End With

    If Not selection Is Nothing Then
        selection1.Value = "some other value"
    End If

End Sub

要使用Find()更改多個值 - A1:A10 ,那么可能會這樣做:

Public Sub TestMe()

    Dim myRng As Range

    With Worksheets(1).Range("A1:A500")
        .Range("A1:A10") = "vi"
        Set myRng = .Find("vi")
        If Not myRng Is Nothing Then
            Do Until myRng Is Nothing
                myRng.Value = "New value"
                Set myRng = .Find("vi")
            Loop
        End If
    End With

End Sub

它有點慢,只要它每次都循環而且可以改進,如果范圍是統一的並立即更換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM