2

私のMain手順では、ユーザーが有効な入力を行ったかどうかを確認する簡単なifステートメントを作成します(ユーザーはデータのリストからプロジェクトの数を選択します。添付の​​スクリーンショットを参照してください)。そのために、プロジェクト番号がプロジェクトのリストに含まれていないかどうかを確認しています。それが当てはまる場合は、エラーメッセージが表示されます。そうでない場合は、他の多くのプロシージャが呼び出されます。

何らかの理由で、実行するとエラー2015が発生します。これは、正しいユーザーエントリであっても、ifステートメントが常にtrueであることを意味します。誰かが私にエラーを理解するのを手伝ってもらえますか?

  • 入力されたプロジェクト番号は「IdSelect」という名前のセルで、「Invoice」というシートにあります
  • この入力がチェックされるデータは、「入力」と呼ばれるシートにあります
  • データは列Bに保存され、「ProjectList」と呼ばれます

以下のコード(注:5回貼り付けようとしましたが、今回は何らかの理由でフォーマットが機能しません-それが何であるかわかりませんか?コードは適切にフォーマットされています。表示が乱雑になって申し訳ありません。誰か教えていただければその問題は私が非常に感謝するかもしれません!)

Sub Main()
    'Turn off screen updating
    Application.ScreenUpdating = False
    'Define variable for currently active cell to reactivate it afterwards
    Dim OldActiveSheet As Object
    Dim OldActiveCell As Object
    Dim i As Integer
    Dim ProjectList As Range
    Set OldActiveSheet = ActiveSheet
    Set OldActiveCell = ActiveCell
    'If-statement to check whether project number is valid or not
    Worksheets("Invoice").Activate
    'Print to Immediate Window to check value - remove later
    Debug.Print Range("IdSelect").Value
    If IsError(Application.Match(Range("IdSelect").Value, "ProjectList", 0)) Then
        'Print to Immediate Window to check value - remove later
        Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0)
        MsgBox "Invalid Choice: Project with this number does not exist!"
        Exit Sub
    Else
        'Call procedures to execute
        Call SortData
        Call Count_Line_Items
        Call Count_Total_Rows
        Call Write_Services(ServCnt)
        Call Write_Expenses(ExpCnt)
    End If
    'Reactivate previous active cell
    OldActiveSheet.Activate
    OldActiveCell.Activate
End Sub

「入力」シートのスクリーンショット:

ここに画像の説明を入力してください

4

1 に答える 1

8

範囲を参照する方法はかなり奇妙です..参照を逃したためですrange。奇妙なことに、次の行でそれを修正するのに十分です Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0)

だからこれを試してみてください:(モバイルで自分の投稿をフォーマットするのに100年かかります.....)。以下のサンプルコードに示すように、必ず明示的な参照を使用してください。それに応じてシートを設定します。

Dim ws as Worksheet
Set ws = Sheets(1)

 IsError(Application.Match(ws.Range("IdSelect").Value, ws.Range("ProjectList"), 0)) Then 

そして、ここでのエラー処理について読んでくださいmatch

于 2013-01-07T00:12:08.870 に答える