Excel VBA的types不匹配运行时错误13

我有要求写一些将接受范围作为input的function,我需要返回第一个非空单元格的值。 我已经尝试在一个Excel表格,发现非空细胞工作正常。 当我用我的项目Excel文件尝试时,它不工作。 基本上查找范围的方法我得到运行时错误13.检查下面的代码,让我知道是什么问题。 我注意到,即使在我把Range.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 ,然后一旦你有select的单元格使用Target.Address获取单元格的地址

所以你的CellValue会变成:

 CellValue = FoundRange.Address 

虽然,你的问题有点模糊,因为你不用这个UDF做任何事情

您的问题没有提供足够的细节,函数调用不返回非空单元格。 无论发生什么事你的function将只返回testing。

无论如何,通过代码时,你的范围有一个单一的行。

问题似乎与下面的代码

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

没有必要指定After参数Cells(Target.row, 1)

参数对应于从用户界面进行search时活动单元格的位置。 请注意,After必须是范围内的单个单元格。 请记住,search开始于此单元格之后; 指定的单元格不会search,直到方法回绕到此单元格。 如果不指定此参数,则search将在范围左上angular的单元格之后开始。

尝试将该代码更改为

 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 

伊恩你的build议不要使用单元格(Target.Row,1)在查找方法是正确的。 我弄错了。 在这里我把列索引为1,但它应该是2,因为我select的范围是从列B意味着列索引2.所以我得到了实际的错误,因为在该范围内没有列索引1。 所以如果我把2而不是1上面提到的调用,那么它工作正常。 是的,你的权利,我实际上没有返回最后一个非空细胞的价值,因为这是我的研发代码,我不断改变它。 所以发布时,我忘了改变它。 谢谢大家的回复