VBA循环通过列 – 如果在里面

这段代码有什么问题? 它应该返回find“1”的列的标题(第一行)。 我传递行号(nr),它应该在M和T列之间(包括)

Function who(ByVal rowNr As Integer) As String Dim temp As String Dim ws As Worksheet With ActiveSheet Set ws = ActiveWorkbook.Sheets(.Name) End With For i = 13 To 20 Step 1 If ws.Cells(i, rowNr).Value = 1 Then temp = temp & " " & ws.Cells(i,1).Value End If Next i who = temp End Function 

我得到的错误是

应用程序定义的或对象定义的错误

并标记线

 If ws.Cells(i, nr).Value = 1 Then 

我真的不喜欢VB。

如果使用nr作为数字值,为什么要以String发送它。 尝试将其更改为Integer ,至less应该稍微进一步。

编辑:我忘了我认为你可能混合了行/列以及。 我想也许你想要它是:

 If ws.Cells(nr, i).Value = 1 Then 

这对我有效

 Function who(ByVal rowNr As Long) As String Dim temp As String Dim ws As Worksheet Dim i As Long Set ws = ActiveSheet For i = 13 To 20 Step 1 If ws.Cells(rowNr, i).Value = 1 Then temp = temp & " " & ws.Cells(1, i).Value End If Next i who = Trim(temp) End Function