2017-11-21 9 views
1

したがって、引数の1つが列名のサブプロシージャを作成しようとしています。Cellsプロパティ - 実行時エラー91

列名は列番号に変換されます。

Dim ColNum As Integer: ColNum = Range(ColumnNM & 1).Column 

しかし、セルのプロパティで範囲内の列番号を使用しようとすると、91ランタイムエラーが発生します。ここのソリューションのほとんどは、範囲を適切に設定していないためです。

実行時エラー91

ここでこれは私にそのエラーを与える:

Dim rngTA As Range: Set rngTA = wsTA.Range(Cells(24, ColNum)) 

と、この(これは文字列のアドレスと範囲を設定するための適切な方法であるかどうかわからなく、実験)

Dim addr As String: addr = Cells(24, ColNum).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
Dim rngTA As Range: Set rngTA = wsTA.Range(addr) 

私はそこに詰まっています。

ありがとうございました。

+1

試してみよう@setR​​ngTA = wsTA.Range(wsTA.Cells(24、ColNum)、wsTA.Cells(24、ColNum)) ' –

+0

@Shai Rado同じ91エラー – Jovica

+0

@Shai Rado何が起こっているのかわからない私が新しいサブを作成するときには、あなたの行は機能していますが、元のコードデバッガでrngTA範囲の設定が止まっていたので、コード全体を再チェックする必要があります。申し訳ありません、ありがとうございます。 – Jovica

答えて

3

Rangeは必要ありません。 Cells()は、範囲のオブジェクトです:

Dim rngTA As Range: Set rngTA = wsTA.Cells(24, ColNum) 

始まりエンド2を持っていることが必要Range範囲オブジェクトを使用します。あなたは1つしか必要としないので、それを直接参照してください。あなたはモジュールを必要としない

2

、あなただけの一致を使用することができ、それにもかかわらず、ここでの関数である。ここで

Function Letter(oSheet As Worksheet, name As String, Optional num As Integer) 
If num = 0 Then num = 1 
Letter = Application.Match(name, oSheet.Rows(num), 0) 
'Letter = Split(Cells(, Letter).Address, "$")(1) 
End Function 

名前はあなたの列ヘッダーの名前で、oSheetがあり、シートの名前です。あなたが検索している行が1でない場合に数値として使用できるオプションの変数です。引用符を削除すると、数字ではなく文字が得られます。

+2

これは、ジョブを完了させる最も遅い方法です。 Excelは数値で動作し、任意の文字列を数値座標に解析する必要があります。列を文字列に変更することで、Excelはそれを解析して数値に戻す必要があります。 –

+2

参照:https://stackoverflow.com/questions/36073943/range-vs-cells-run-times –

+0

ありがとう!それは知らなかった... – Lowpar

関連する問題