2011-01-31 4 views
2

このコードで何が問題になっていますか?それは "1"を見つける列のヘッダー(1行目)を返すことになっています。私は取得エラーがVBAループスルー列 - 内部の場合

アプリケーション定義またはオブジェクト定義 エラーである

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 

行数(NR)を通過し、それが列MとT(両端を含む)の間に見えることになっている

やマークライン

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

私は本当にVBを嫌います。

+2

1を働いていた)、それはあなたが動作するコードを書くことができませんVBのせいでどのように? 2)変数に説明的な名前を付ける必要があります。したがって、「bla」は良い選択ではありません。 –

+0

@ Cody-Greyもしvarsがドイツ語であれば、とにかくそれらをblaとして読むでしょう。コードで私は通常の名前を使用する - ここではbla;)私はC#/ Java/Obj-Cでええ、うん.. VBでは本当に不親切です。 – SuperMario

+0

また、私はあなたの問題を解決する方法を検討しましたが、あなたはVBAコードを書くよりも何も質問を書いていないようです。コードブロックの上の段落はちょうど種類のトレイルをブロックします... –

答えて

1

数値としてnrを使用した場合、なぜそれをStringとして送信していますか?それをIntegerに変更してみてください。あなたは少なくともさらに進んでいくはずです。

編集:行/列も混同している可能性があることを忘れました。私は多分あなたはそれになりたいと思う:

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

これを指摘しています。エラーを取り除きますが、 "1"が見つかる列の1行目から値を返しません。 – SuperMario

+0

@SuperMario:私の編集の前後にあなたのコメントを書いたかどうかは分かりませんが、以前の場合は私の他の推奨されるコードの変更も見てください。 –

+0

いいえ、nrは行の名前で、この行のMからTの列では、1を探して列の最初のセルを返します(文字列 "who"に追加します)。 – SuperMario

0

これは私のため

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 
関連する問題