2016-10-14 13 views
0

VBAの空白と空白以外のセルをチェックするこの機能があります。Excel VBAでランタイムエラー91

Object variable or With block Variable not set

Set rng = main.Range(rng1 & [rng2].Find("*", , , , , xlPrevious).Row) 

しかし、私はそれを実行した場合、それはない、時には:この行はエラーを返します

If toCheckBlanks("O23:O", Range("O23:O32")) Then exit sub 

Function toCheckBlanks(rng1 As String, rng2 As Range) 
Dim iBlank&, iNonBlank& '& declare variables as long 
Set main = ThisWorkbook.Sheets("Main") 
Dim rng As Range 
Set rng = Nothing 

Set rng = main.Range(rng1 & [rng2].Find("*", , , , , xlPrevious).Row) 

With WorksheetFunction 
    iNonBlank = .CountA(rng) 'count non-blank 
    iBlank = .CountBlank(rng) ' count blank 
End With 

If iBlank > 0 Then 
    toCheckBlanks = True 
End If 

Set rng = Nothing 
End Function 

は、私はそれをこの方法を使用することを試みましたエラーがあり、それ以外はエラーが発生します。 いずれかのヘッドアップ?

+0

?なぜ 'Set rng = main.Range(rng1&rng2.Find(" * "、、、、xlPrevious).Row)'を使うのはなぜですか? – YowE3K

+0

@ YowE3K私もやってみました。それでも同じエラーが返されます。ありがとう:) – ramj

+1

あなたは 'O23:O32'セルに何かを持っていますか? '.Find'が何も見つからなければ、' Nothing'の怒りを返します。 – YowE3K

答えて

0

あなたの関数の構文は、まずあなたもあなただけtoCheckBlanksの値を設定する(値が関数によって返されるすなわち

Function toCheckBlanks(rng1 As String, rng2 As Range) as Boolean 

関数の戻り値のデータ型を指定する必要があり

あまり良くありません)を条件(iBlank> 0)のif文に追加します。したがって、iBlankが< = 0の場合、関数は正しく動作しません。 toCheckBlanksが常に設定されていることを確認する必要があります。通常、これは関数の先頭でデフォルト値に初期化することによって行われます。

コードにノイズや不要な行がたくさんあるようです。整頓

+0

関数の戻り値の型を指定しても、エラーは変更されません。ありがとう。 – ramj

+0

私が列挙した他の問題はもっと重要です。なぜそれは時々動作し、時には失敗するのかを説明します – lllpratll

+0

私もやってます:) – ramj

1

はこれを試してみてください:

Function toCheckBlanks(rng1 As String, rng2 As Range) As Boolean 
    Dim iBlank&, iNonBlank& '& declare variables as long 
    Dim FindResult As Range 
    Set main = ThisWorkbook.Sheets("Sheet1") 
    Dim rng As Range 

    Set FindResult = rng2.Find("*", , , , , xlPrevious) 
    If FindResult Is Nothing Then 
     'do whatever is appropriate if rng2 is Empty 
     '... 
     toCheckBlanks = False 
    Else 
     Set rng = main.Range(rng1 & FindResult.Row) 

     With WorksheetFunction 
      iNonBlank = .CountA(rng) 'count non-blank 
      iBlank = .CountBlank(rng) ' count blank 
     End With 

     toCheckBlanks = iBlank > 0 

    End If 
End Function 
0

私はあなたにそれを短縮することができると思う:あなたは `評価カッコ内rng2`ていないのはなぜ

Function toCheckBlanks(rng1 As String, rng2 As Range) As Boolean 
    Dim rng As Range 

    Set rng = rng2.Find("*", , , , , xlPrevious) 
    If Not rng Is Nothing Then 
     Set rng = ThisWorkbook.Sheets("Main").Range(rng1 & rng2.Find("*", , , , , xlPrevious).Row) 
     toCheckBlanks = WorksheetFunction.CountBlank(rng) > 0 
    End If 
End Function 
関連する問題