1

基本的にいくつかの列を処理し、Access 2003 データベースとのクロスチェックに基づいて結果を出力する大きなマクロがあります。それはまったく問題なく動作します - ヒッチはまったくありません。

ただし、最近、変更を加える必要がありました。コードの 1 行で文字通り「8」を「9」に変更していました。しかし、次に実行すると、1004: Method 'Range' of object '_Global' failedエラーがスローされました。Excel 2003 は面白いものです。私はこれについて何時間も頭をかきむしり、エラーの原因となっている可能性のある問題のあるコード行を見つけようとしましたが、残念ながら役に立ちませんでした。私は何かを引き起こすとは思っていなかった何かをしました:

元のマクロ (100% 動作確認済み) から始めて、コードを開いて保存すると、「最後に更新された」メタデータが保存を反映して更新されますが、何も変更されていないにもかかわらず、そのエラーが再びスローされます。オープニングで。

マクロをそのまま保存すると壊れてしまうほど壊れやすいようです。何か案は?

更新:最初に問題を引き起こした変更内容は次のとおりです

iOutputCols = 9 'this was changed to 9 from 8
ReDim Preserve sOutputCols(iOutputCols)
sOutputCols(0) = "Policy No"
sOutputCols(1) = "Client"
sOutputCols(2) = "Trans"
sOutputCols(3) = "Effective Date"
sOutputCols(4) = "ClosingRef"
sOutputCols(5) = "Gross"
sOutputCols(6) = "Comm"
sOutputCols(7) = "Net Due"
sOutputCols(8) = "Risk"   'this line was added

ここで変更を行うと、最初はエラーが発生していましたが、特別なことではないようです。コードの他の場所や他のモジュールで上記のような小さな変更を行ったことがtestval = "test"あります。それを引き起こす最も最小限の方法は?単に開いて、何も変更せずに保存すると、次に使用するとエラーが発生します。

エラーは、フォームの一部である完全に異なるコード セクションの次の行で発生します。

    If strErr <> "" Then MsgBox strErr, vbInformation + vbOKOnly, "Action Error"

Application.ScreenUpdating = True 'error occurs here, message box which shows me the error right above

サブ終了

更新 2

エラー処理を削除すると、この行にエラーがスローされます

    Case "> Send Next Period Reminder" 'error on line below
        Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line
        Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value)
'more of the same replacetexts below

コンテキストとしては、これは「Send Next Period Reminder」のオプションが選択されている場合です。これは、単語 .dot テンプレートを静的フォルダーから取得し、シート内で選択されたデータに基づいて入力します (したがって、テキストを置き換えます)。これは別のモジュールにあり、これまで触れられたことはありません。

4

1 に答える 1

1

Rangeメソッド呼び出しを適切に修飾してみてください。次のような行があります。

    Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line
    Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value)

明らかではないかもしれませんが、環境とコードベースの両方で、これらの限定されていない の使用Rangeが失敗する場合があります。Range("Address...のような参照を のようなものに変更しますyourTargetWS.Range("Address..

于 2013-09-24T00:16:32.420 に答える