簡體   English   中英

對於Excel VBA,類型不匹配運行時錯誤13

[英]Type Mismatch Run Time error 13 for excel VBA

我需要編寫一些函數來接受Range作為輸入,並且我需要返回第一個非空單元格的值。 我在一張Excel工作表中嘗試過,發現非空單元格工作正常。 當我嘗試使用項目excel文件時,該文件無法正常工作。 基本上對於Range的Find方法,我會遇到運行時錯誤13。檢查下面的代碼,讓我知道是什么問題。 我什至注意到,當我將Range.Row屬性設置為“ Row”時,在代碼中將其作為行(在下面的代碼中請參閱Target.row)。

 Sub Btn_GenerateChartClicked()
    If Range("E9") = "Scatter" Then
        MsgBox "Scatter is selected"
        Dim str As String
        Dim rng As Range
        Set rng = Range("B12:I12")
        str = FindNonEmptyCellFromRange(rng)
       ' MsgBox str

    Else
        MsgBox "Bar is selected"
    End If
End Sub


Function FindNonEmptyCellFromRange(Target As Range) As String
Dim ws As Worksheet
Set ws = Sheets("Benchmarking_Project")
Dim foundRange As Range

Set foundRange = Target.Find("*", Cells(Target.row, 1), xlFormulas, , xlByColumns, xlPrevious)
'Dim cellValue As String
'cellValue = foundRange.Value
FindNonEmptyCellFromRange = "Test"
'cellValue


End Function

find目標。

使用Cell.Find ,然后一旦選擇了單元格,請使用Target.Address獲取單元格的地址

因此,您的CellValue將變為:

CellValue = FoundRange.Address

雖然,您的問題有點模糊,因為您仍然不使用該UDF做任何實踐

您的問題沒有提供足夠的詳細信息,並且函數調用未返回非空單元格。 無論發生什么情況,您的函數將僅返回Test。

無論如何,遍歷代碼時,您的范圍中只有一行。

問題似乎與以下代碼有關

Set foundRange = Target.Find("*", Cells(Target.row, 1), xlFormulas, , xlByColumns, xlPrevious)

無需指定After Parameter Cells(Target.row, 1)

從用戶界面進行搜索時,參數對應於活動單元格的位置。 注意,After必須是該范圍內的單個單元格。 請記住,搜索是在此單元格之后開始的; 直到方法回繞到該單元格之前,不搜索指定的單元格。 如果不指定此參數,則搜索將在范圍左上角的單元格之后開始。

嘗試將代碼更改為

Set foundRange = Target.Find("*", , xlFormulas, , xlByColumns, xlPrevious)

以下代碼可能對您有用

Sub Btn_GenerateChartClicked()
    If Range("E9") = "Scatter" Then
        MsgBox "Scatter is selected"
        Dim str As String
        Dim rng As Range
        Set rng = Range("B12:I12")
        str = GetFirstNonEmptyCell(rng)
       ' MsgBox str

    Else
        MsgBox "Bar is selected"
    End If
End Sub


Public Function GetFirstNonEmptyCell(Target As Range)
    Dim startCell As Range, firstNonEmptyCell As Range

    For Each c In Target.Cells
        If Trim(c.Value) <> "" Then
            Found_Address = c.Address
            Exit For
        End If
    Next
    GetFirstNonEmptyCell = Found_Address

End Function

Ian關於在Find方法中不使用Cells(Target.Row,1)的建議是正確的。 我錯了 因為我將列索引設置為1,但是應該將其設置為2,因為我選擇的范圍是從列B出發的,這意味着列索引2。所以我實際上出錯了,因為在該范圍內沒有列索引1。 因此,如果我在上面提到的電話中放入2而不是1,那么它工作正常。 是的,您的權利是我沒有實際返回最后一個非空單元格的值,因為那是我不斷更改的R&D代碼。 因此在發布時,我忘記更改它。 謝謝大家的答復

暫無
暫無

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

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