2017-05-11 5 views
1

次の関数は、一連の列ヘッダーをループし、選択したヘッダーの列番号を返すように設計されています。この関数は、検索名と、検索が実行されるシートを取得します。実行時エラー '1004'がワークシート名を受け取ります

Function getColumn(name As String, sheet As Worksheet) As Integer 

Dim k As String, flag As Boolean, column As String 

flag = False 
k = 1 

Do While flag <> True 
    column = sheet.Cells(1, k).Value 
    If column = name Then 
     flag = True 
    Else 
     flag = False 
     k = k + 1 
    End If 
Loop 

getColumn = k 

End Function 

これは前のシートで機能しましたが、この行はエラーの箇所として強調表示されています。

column = sheet.Cells(1, k).Value 

複数の方法でシート名を渡してみました。 Sheet9として、引用符なし、シート(「債務」)など、など

私はまた、引数の型を変更しようとしたので、そのシートは文字列であり、これを持つ:

column = Sheets(sheet).Cells(1, k).Value 

しかし、運!

PLZ HALP

+1

kを文字列の代わりにLongに変更してみてください。 –

+2

しかし、 'getColumn = Application.WorksheetFunction.Match(name、sheet.Range(" 1:1 ")、0)'を実行して、他のすべてをスキップすることができます。 –

+0

これは、 'sheet.Range(" A "&k).Value'を使って遊んでいた時から残っていたものです。それは助けにもならなかったのですが。 – sethW

答えて

1

あなたはワークシートのセルから関数を呼び出している場合は、オブジェクトワークシートではなく、ワークシートを渡す必要があります。

Function getColumn(name As String, sheetn As String) As Long 
Dim k As Long, flag As Boolean, column As String 

flag = False 
k = 1 

Do While flag <> True 
    column = Sheets(sheetn).Cells(1, k).Value 
    If column = name Then 
     flag = True 
    Else 
     flag = False 
     k = k + 1 
    End If 
Loop 

getColumn = k 
End Function 

が動作します。

enter image description here

エラー処理ロジックを組み込む方が良いでしょう。

+0

OPが何らかの理由で「getColumn(Name As String、Sheet As Worksheet)As Integer」を保持したい場合は、 '= getColumn(" qwerty "、Worksheets(" Sheet1 " )) '? – BruceWayne

+0

@ BruceWayne私はそれを細胞で働かせることはできません。 –

+1

シートを直接渡すことはできませんが、範囲を渡してコード内のシートを取得することができます。 – Rory

関連する問題