2016-06-22 11 views
0

VB.NETでExcelに接続しているときに問題があります。シートの中で空ではない最後の行を見つけるためにセルをループしているとき、空のセルの値を ""私はエラーを受け取った瞬間になると、NullReferenceExceptionが捕まえられました。オブジェクト参照がオブジェクトのインスタンスに設定されていません「VB.NET空のExcelセルに接続 - NullReferenceExceptionが発生しました

はコードの断片がある:私はxlsheet.Cells(lRow、3).VALUE等に状態何回ながら変更しようとした

Dim xlApp As New Excel.Application 
    Dim xlWb As Excel.Workbook 
    Dim xlsheet As Excel.Worksheet 
    Dim lRow As Integer = 1 
    Dim excelFilePath As String 

    Using FileDialog As New OpenFileDialog 

     FileDialog.Title = "Please choose Excel file with XXX" 
     FileDialog.FileName = "" 
     FileDialog.ShowDialog() 
     excelFilePath = FileDialog.FileName 

    End Using 

    xlApp.Visible = True 
    xlWb = xlApp.Workbooks.Open(excelFilePath) 
    xlsheet = xlWb.Sheets("Sheet1") 

    Do While xlsheet.Cells(lRow, 3).value.ToString() <> "" 
     lRow += 1 
    Loop 

しかし、私はいつも失敗しました - それを動作させる唯一の方法はtry-catchですが、私は何が間違っていて、それを正しい方法で修正するのかと思っていますか?

+0

'を行いxlsheet.Cells(lRowは、3)何もAndAlso xlsheet.Cells(lRow、3).Value.ToStringを(ISNOTながら:あなたはこのラインを使用することができます<> "" '? –

+1

[NullReferenceExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) ) – Blackwood

答えて

0

excelの空のセルには値NOTHING

ループを次のように変更してください。

Do While xlsheet.Cells(lRow, 3).value IsNot Nothing 
     lRow += 1 
    Loop 

あなたが出てくるの行は lrow-1はあなたが列などをループする必要があります

これを行うために

When I'm looping through the cells to find last non-empty rows inside sheet,

その列の最後の非空のセルで、最初の空のセルであります行

1

まあとしてだけでなく、あなたが行うことができます一つのことはString.IsNullOrEmptyを使用することですので、Doループは次のようになります。

Do While String.IsNullOrEmpty(xlsheet.Cells(lRow, 3).value) = False 
    lRow += 1 
Loop 

しかし、あなたが代わりにFor Nextを使用して検討するかもしれないので、それは、無限ループにあなたを得る可能性があります:

あなたが最初の最後に使用された行を取得する必要があります

Dim lastRow As Integer = xlsheet.Cells(xlsheet.Rows.Count, 3).End(Excel.XlDirection.xlUp).Row 

'Then use the loop: 

For x = 1 To lastRow 
    If String.IsNullOrEmpty(xlsheet.Cells(x, 3).value) = False Then 
     'Do something 
    End If 
Next 

をそして、あなたの主な目的は取得する場合最後に使用された行では、行をループする必要はありません。 )

Dim lastRow As Integer = xlsheet.Cells(xlsheet.Rows.Count, 3).End(Excel.XlDirection.xlUp).Row 

希望に役立ちます:)

関連する問題