2016-04-28 3 views
0

私はExcelの特定の列の最後の行を見つける機能を持っています。関数の遅延バインディングエラーを修正するにはExcelの列の最後の行を見つけなければなりませんか?

以下

コードが

Private Function FindLastRowInColumn(ByVal XlWorkSheet As Excel.Worksheet, ByVal ColumnName As String) As Long 
    Dim LastRow As Long 
    With XlWorkSheet 
     LastRow = .Cells(.Rows.Count, ColumnName).End(Excel.XlDirection.xlUp).Row 
    End With 
    Return LastRow 
End Function 

である私はOption Strictの電源を切らずにこのエラーを修正するにはどうすればよい

LastRow = .Cells(.Rows.Count, ColumnName).End(Excel.XlDirection.xlUp).Row 

Error: Option Strict On disallows late binding.

ライン上のエラーを取得していますか?

jmcilhinneyの推奨事項で問題を解決できました。 以下は私のために働いたコードです。たぶん、ファイルの先頭に

Option Strict Off 

を書く

Public Function FindLastRowInColumn(ByVal XlWorkSheet As Excel.Worksheet, ByVal ColumnName As String) As Long 
    Dim LastRow As Long 
    With XlWorkSheet 
     LastRow = CType(.Cells(.Rows.Count, ColumnName), Excel.Range).End(Excel.XlDirection.xlUp).Row 
    End With 
    Return LastRow 
End Function 
+2

[オプション厳密には、遅延バインディングを不許可]の可能性のある重複( http://stackoverflow.com/questions/12375405/option-strict-on-disallows-late-binding) – MusicLovingIndianGirl

+0

最後の行を細かくするには 'XlWorkSheet.Range.UsedRange.Rows.Count'が役立ちます。しかしそれにはいくつかの条件があります。 – Yog

答えて

2

どのメンバーが遅延バインドされているかを最初に判断します。これは簡単にラインをもう一度入力するだけで、インテリセンスによってどのメンバーが提案されていないかを知ることができます。次に、メンバーがどのタイプに属しているかを判別し、可能であれば、そのタイプとして参照をオブジェクトにキャストする必要があります。例えば、これは遅延バインディングされる:

Dim obj As Object = "Hello World" 
Dim length As Integer = obj.Length 

objObject基準とLengthタイプObjectのメンバーではありません。それはobjによって参照されるかのタイプStringのメンバー、およびオブジェクトで事前バインディングを達成するので、それはその型にキャストすることができますStringです:

Dim obj As Object = "Hello World" 
Dim length As Integer = CStr(obj).Length 
+0

ありがとうございました。私はその問題を解決することができた。私は私のために働く解決策で質問を更新しました。 – Rekha

-1

? (輸入前)

+0

OPは明らかに彼女はそれをオフにしたくないと言いました – MusicLovingIndianGirl

+0

私の悪いです。私はそれを見ませんでした。 – shadow

関連する問題