0

私は次のものを持っています:

Private Sub cmdColumnLetter_Click()
    Dim colRange As Range

    Set colRange = Excel.Application.InputBox( _
    Prompt:="Please Select Any Cell In ""Splitter"" Column", _
    Title:="Column", _
    Default:=fTableRange.Columns(1).Column, Type:=8)

    fColNumber = colRange.Column
    TxBoxColumnNum = fColNumber
End Sub

ユーザーがキャンセルSet colRange =を押すと、オブジェクトをこの変数に割り当てようとして失敗します。このエラーを防ぐために On Error 構造を使用する必要がありますか、それともより洗練されたアプローチがありますか?

4

2 に答える 2

2

オブジェクトと値を割り当てるための異なる構文は、IMO、VBA の 1 つの欠点です。

そのため、InputBoxオブジェクトまたは値を返す関数はエラーを引き起こします。

ただし、関数の引数を渡す構文は同じです。

これを調べて、私は目的と代替ソリューションを提供しますが、実際にはエラー処理ソリューションよりも優れていません:

Function SetObject(v, ByVal ExpectedTypeName As String) As Object
    If TypeName(v) = ExpectedTypeName Then Set SetObject = v
End Function

Private Sub cmdColumnLetter_Click()
    Dim colRange As Range

    Set colRange = SetObject(Excel.Application.InputBox("input", Type:=8), "Range")
    If Not colRange Is Nothing Then
        Debug.Print "..."
    End If
End Sub

SetObjectオブジェクトまたは値のいずれかを受け入れますが、typename が予想されるものと一致する場合、またはNothing一致しない場合は、常に指定されたオブジェクトを返します。

于 2013-10-11T08:58:20.540 に答える
1

はい、OERN を取得する必要があります

Sub Test()
    Dim colRange As Range
    Dim fColNumber As Long, TxBoxColumnNum As Long

    On Error Resume Next
    Set colRange = Excel.Application.InputBox( _
    Prompt:="Please Select Any Cell In ""Splitter"" Column", _
    Title:="Column", Default:=fTableRange.Columns(1).Column, Type:=8)
    On Error GoTo 0

    If colRange Is Nothing Then Exit Sub

    fColNumber = colRange.Column
    TxBoxColumnNum = fColNumber
End Sub
于 2013-10-10T15:39:33.667 に答える