1

次の VBA 関数を検討してください。

Function getFirstColumn(Optional sheetName As String) As Long
    'In particular the IF statement below.
    If sheetName = "" Or sheetName = Null Then sheetName = ActiveWorkbook.ActiveSheet.Name
    With ActiveWorkbook.Worksheets(sheetName)
        getFirstColumn = .Cells.Find("*", .Cells(1), xlFormulas, xlWhole, xlByColumns, xlNext).Column
        If Err <> 0 Then getFirstColumn = 0
    End With
End Function

この機能を使用する場合、2 番目に開いたシートから使用する場合は問題ありません。

しかし、コードが関数ベースの同等のものに変更されると'If IsEmpty(sheetName) Or IsNull(sheetName) Then sheetName = ActiveWorkbook.ActiveSheet.Name、関数を所有していないシートから関数を使用しようとすると問題が発生します。

Erro em tempo de execução '9':
サブスクライブ fora do intervalo.

それらの違いは何ですか?そして、なぜそのようなエラーが正確にトリガーされるのですか?

4

2 に答える 2

2

「シート名」は変数です。変数は未定義であるか、オブジェクトを参照している可能性があります...またはNULLである可能性があります。

オブジェクトの場合、オブジェクト自体がバリアント値 NULL に評価される可能性があります。したがって、「IsNull()」関数です。

他のバリアントには、「IsEmpty()」(あなたが言及した)、「IsNothing()」、さらには「IsMissing()」が含まれます。

于 2012-10-05T17:05:56.890 に答える
1

VBAでは、指定されていないオプションの文字列は空の文字列に評価されます。

したがって、getFirstColumnが引数なしで呼び出された場合、sheetNameは空の文字列になります。

sheetName = "" is true
isEmpty(sheetName) is false
isNull(sheetName) is false
sheetName = Null is Null btw.

したがって、最初のオプションを選択してください。

于 2012-10-05T17:29:45.130 に答える