• 締切済み

windows7上でVBAマクロがエラー

 仕事で使っているエクセル97で作ったVBAマクロがありますが、winXPからwin7に乗り換えたらエラーがでるようになりました。  コマンドボタン押下によるマクロで、変数フラグに「xxxx=1」という記述でコンパイルエラーが起こり、実行がストップします。  自動処理だけを目的に作っており、定石を踏んだマクロになっておらず、このxxxxにもディメンションで変数型を指定しておらず(こちらにおられる諸兄には怒られそうですが)、 Private Sub CommandButton1_Click() Application.ScreenUpdating = False xxxx = 1   :  というソースの中で、開始直後にxxxx=1にフォーカスがあたり、コンパイルエラーになります。  winXPまでは問題なく動作していたマクロです。(Vistaでは試すチャンスがありませんでした)  解決方法はあるのでしょうか。それとも変数にDim定義を追加する修正をソースへいれないとだめでしょうか。  ご存知の方、ご指導ください。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

XXXXはどういう変数ですか(変数名)? エラーコードはなんと出ますか? VBAで、デバッグ・VBAProjecのコンパイルの方をしているのですか。実行ーSubユーザーフォームの実行の方ではどうなりますか。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

「変数を定義されていません」というエラーではないでしょうか? そうであれば、変数を定義するか、シートモジュールの先頭にある「Option Explicit」を消してください。 あと、ツール→オプション→変数の宣言を強制するにチェック入っていると自動で「Option Explicit」が入るのでチェックを外しておきます。

関連するQ&A

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • VBAで印刷するとエラーになってしまいます。

    VBAで印刷するとエラーになってしまいます。 EXCELシートをボタンの押下で印刷するマクロを組んだのですが、 実行すると必ずエラーになってEXCEL自体が落ちてしまいます。 添付画面を参照して下さい。 普通にEXCELの印刷([ファイル]->[印刷])から印刷すると問題なく印刷できます。 何か足りないものがあるのでしょうか? どなたか教えてください 以下ソース ---- Private Sub btn_Print_Click() 'ActiveSheet.PageSetup.CenterHeader = "&B&12印刷" ActiveWorkbook.Worksheets(1).PrintOut End Sub ----

  • excel vba です

    シートにActiveXコントロールでボタンを作りました そのボタン押下時、 標準モージュールにあるソースを直接呼出したいのですが、 ボタンとそのモジュールの割り当て方がわかりません 教えてください (1) sheet1 に CommandButton1 というボタンがあります (2) 標準モージュールにある、 Sub test() というモジュールを直接呼び出したい 普通にやると、Sheet1 に Private Sub CommandButton1_Click() というモジュールができてしまいます そこから、Sub test() をcall するのではなく、直接呼び出したいのです 教えてください、宜しくお願いします

  • コマンドボタンでマクロを起動するとエラーになる

    以下のようなコードをツールバーのマクロから起動するようにするとできるのですがコマンドボタンから起動するようにするとエラーになります。なぜでしょうか? Private Sub CommandButton1_Click() Application.ScreenUpdating = False Workbooks.Open "C:\My Documents\b.xls" Windows("b.xls").Activate Columns("A:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ Workbooks("a.xls").Sheets("Sheet2").Range"A1:A3"), CopyToRange:=Columns("E:G"), Unique:=True ~ここでエラー'1004'~ Windows("a.xls").Activate Workbooks("C:\My Documents\b.xls").Close Application.ScreenUpdating = True End Sub

  • マクロ ユーザーフォームが表示されない

    いつも回答して頂き、ありがとうございます。 Sub UserForm1() UserForm1.Show End Sub と記述しましたが、エラーが発生し、ユーザーフォームが表示してくれません。 コンパイルエラー:Functionまたは変数が必要です フォームはコマンドボタンを一つ配置し、 Private Sub CommandButton1_Click() Unload UserForm1 End Sub と記述してあるだけです。何が悪いのでしょうか?御教授の程宜しくお願い致します。

  • VBAのこの実行時エラーは何故起きる?

    ExcelVBAで次の大変簡単なコードを書いてみました。 シート上の行列(100*100)の範囲にランダムに☆印を100個表示するというものです。sheet1にコマンドボタンを貼り付け押すと実行します。ところが実行時エラーが起きて止まります。(メッセージ:”アプリケーション定義またはオブジェクト定義のエラーです”)原因はなんでしょうか?6行目が問題なようです。うまく動く時もあるので不思議です。 Private Sub CommandButton1_Click() Application.ScreenUpdating = False For n = 1 To 100 R = Int(Rnd * 100) C = Int(Rnd * 100) Sheet1.Cells(R, C).Value = "☆" Next Application.ScreenUpdating = True End Sub

  • VBAのCallステートメントについて

    ExcelのSheet1にCommandButton1(表示)があります。 -------------------------------------------------- Private Sub 表示_Click() (DBより表示処理) End Sub -------------------------------------------------- UserForm1にCommandButton1(登録)があります。 -------------------------------------------------- Private Sub 登録_Click() (DBへの登録処理) UserForm1.Hide Call WorkSheets("Sheet1").表示_Click() ・・・☆ Exit Sub End Sub -------------------------------------------------- 表記のようなプログラムにしたところ、☆印のところで、 下記エラーが表示されてしまいます。 【エラー】--------------------------------------------------- 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 ------------------------------------------------------------- どのようにしたらCallステートメントで表示_Clickを呼び出すことが できるのでしょうか。

  • エクセルでマクロを実行するとコンパイルエラー

    エクセルでVBエディタでソースコードを記述し、マクロを実行すると、コンパイルエラー、「SubまたはFunctionが定義されていません」とエラーが出ます。これはどういうエラーですか?何が間違っているのですか?

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • EXCEL2003 VBAで動作が速くなるようにマクロ記述したいのです

    EXCEL2003 VBAで動作が速くなるようにマクロ記述したいのですが、どのように行えばいいのでしょうか? Sheet1のA1からA300まで、関数によって計算されたデータが格納されています。 そのA1からA300の値(関数の計算結果のみ)を、コマンドボタンをクリックした時にSheet2のA1からA300にコピーしています。 コマンドボタンをクリックする度に、Sheet1のA1からA300までの値を、Sheet2に列を変えてコピーし、値を蓄積する方法を取っています。 以下のマクロを記述して走らせてみましたが、動作が遅いのが気になります。 コピーして貼り付けている動作が遅くなっているのでしょうか? もう少し早くなる方法はありますでしょうか? よろしくお願いします。 Sub CommandButton1_Click1() Dim I Dim N Worksheets("sheet1").Range("F1").Value = Range("F1").Value + 1 N = Worksheets("sheet1").Range("F1").Value For I = 1 To 300  Application.ScreenUpdating = False   Worksheets("sheet1").Cells(I, 1).Copy   Worksheets("sheet2").Cells(I, N).PasteSpecial Paste:=xlValues  Application.ScreenUpdating = True Next End Sub

専門家に質問してみよう