2

エラーなしで実行される32ビットXPマシン上のExcel2007でvbaプログラムを作成しました。ただし、64ビットServer 2008 R2リモートデスクトップサービスマシンで同じスプレッドシートを実行しようとすると、回復不能なエラーが発生します。問題を引き起こしているコードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrHandle

    Dim MachPhone As String
    Dim ConPhone As String

    Select Case Target.Row

    Case 12
        MachPhone = PhoneFormat(Range("B12"))
        Range("B12").Value = MachPhone
    Case 13
        ConPhone = PhoneFormat(Range("B13"))
        Range("B13").Value = ConPhone
    End Select

    ErrHandle:
        Exit Sub
        Resume

End Sub

PhoneFormat関数は、電話番号の形式をチェックし、電話番号が何であるかがわからない場合は、形式化された電話番号または元の文字列を返します。

4

1 に答える 1

3

イベントの無効化:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim val As String
Dim Phone As String
Dim rw As Long

    On Error GoTo ErrHandle

    rw = Target.Row
    If rw = 12 Or rw = 13 Then
        With Target.Parent.Cells(rw, 2)
            val = Trim(.Value)
            Phone = Phoneformat(val)
            If val <> Phone Then
                Application.EnableEvents = False
                .Value = Phone
                Application.EnableEvents = True
            End If
        End With
    End If
    Exit Sub

ErrHandle:
    Application.EnableEvents = True

End Sub
于 2011-07-07T20:25:37.653 に答える