エクセルでソフトを作っています。
作成時の環境
OS   Windows98
Excel 2000
ソフトはエクセル2000で作成しておりまが
ソフトは2002、97でも動くよう心がけて作っています。
それで現に2002、97でも動いているソフトです。
しかしExcel97であるマクロだけが効かないのです!!
さっぱりわかりません。
尚ファイルを閉じるマクロなのですが・・・

マクロ↓
ActiveWorkbook.Save
ThisWorkbook.Close

ログ↓
アプリケーション例外が発生しました:
アプリケーション: excel.dbg (pid=124)
発生時間: 6/26/2001 @ 14:3:1.315
例外番号: c0000005 (アクセス違反)

----> システム情報 <----*
コンピュータ名: KATO_SERVER
ユーザー名: Administrator
プロセッサの数: 1
プロセッサの種類: x86 Family 6 Model 3 Stepping 4
Windows Version: 4.0
現在のビルド: 1381
現在のタイプ: Uniprocessor Free

説明不足だと思いますがなんか思い当たる人がいれば教えてください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

今回問題となっているオブジェクト/プロパティ がどうかは分かりませんが、


私もよくマクロで作っていまして、
Excel95で動いた物のいくつかがExcel97で動かなくなってしまいました。

ピボットテーブルとか、ソートに関する部分だったのですが、
マイクロソフトのHPでいろいろ探したのですが、
そのような説明は全くなし!

最低です。過去の資産を引き継げないなんて。。。

今回の件も、そんな感じかもしれません。
あまり期待せずに、他の方法を検討したほうがいいかもしれませんよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。
確かにマイクロソフトのHPではあまり有力な情報が手に入りませんよね、
今回このサイトで質問した後も自力で調べていましたらたまたま原因が
わかりました!!
ソフトではたくさんユーザーフォームを使っているのですがそれぞれの
フォーム(リストボックスとかテキストボックスとか)のプロバティの
コントロールソースが原因で強制終了が発生してました。
そのコントロールソースで同一シートのセルを参照するのではなく他のシートの
セルを参照すると問題あるみたいです。
ただこの問題はExcel97のみでExcel2000、2002では解決されてるみたいです。

Excelの機能、Windowsの機能、この2つの機能をごちゃまぜに使うのはよくないってことですね。

お礼日時:2001/06/29 11:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q【Excel VBA】ThisWorkbook モジュールのマクロ

Excel2003を使用しています。

39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。

現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2行下のセルへ“○月計”と入力されるようコードを書いてみました。

…が、そうではないのか、それぞれのシートのC列最終行から2行下のセルへ“○月計”と入力されるものの、E列、F列、G列へ数式は入力されません。

せっかくなので、できることなら数式の入力までマクロで処理したいのですが、どのようにしたらThisWorkbook モジュールに書いているコードまで実行されるのでしょうか?
よろしくお願いします。

Excel2003を使用しています。

39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。

現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2...続きを読む

Aベストアンサー

No2です。

<方法1>
(No1様の回答の前半の方法)
・Macro1の処理内(End Withの前)に、 Workbook_SheetChangeの処理
 内容をそのまま入れてしまう。(コピペでも良い)
・そのままだと処理がうまくつながらないので、データの受け渡し部分
 を修正。
 Dim shName As String
 shName = Sh.Name
    ↓
 Dim shName As String, Target as Range
 shName = .Name
 Set Target = .Cells(LastR, "C")
みたいな感じ。


<方法2>
(No2の回答内容:基本的には方法1と同じ)
・Private Sub Workbook_SheetChangeはイベント用サブルーチン名の
 予約語なので、別の適当な名に変更する。(例えば: Sub Test)
・Macro1のループ内から<方法1>でコードをコピペした変わりに、↑の
 Sub Testを呼び出すようにする。
 Call Test(Worksheets(shNum), .Cells(LastR, "C"))

注)
1)もしもMacro1が、ThisWorkbookモジュール以外にある場合は<方法2>
 のままではサブルーチンコールができません。
 Macro1をThisWorkbookモジュールに移動するか、Testを標準モジュール
 に移動します。
 TestとMacro1が同じモジュール内にあるならそのままでOKですが、
 違うモジュールにおく場合(Module1とModule2など)、はTestの前の
 Private宣言をはずしてください。
2)Targetは多分予約語ではないと思いますが(未確認)、できれば他の
 変数名にしておいた方が安全かも…

No2です。

<方法1>
(No1様の回答の前半の方法)
・Macro1の処理内(End Withの前)に、 Workbook_SheetChangeの処理
 内容をそのまま入れてしまう。(コピペでも良い)
・そのままだと処理がうまくつながらないので、データの受け渡し部分
 を修正。
 Dim shName As String
 shName = Sh.Name
    ↓
 Dim shName As String, Target as Range
 shName = .Name
 Set Target = .Cells(LastR, "C")
みたいな感じ。


<方法2>
(No2の回答内容:基本的には方法1と同じ)
・Private...続きを読む

QExcel:ThisWorkbookオブジェクト内にプロシージャを追加し、それを標準モジュールから呼び出すことは可能?

(おかしなことを言っているかもしれませんし、
VBAについて正しく理解できていないのかもしれません)

ThisWorkbookオブジェクト内にプロシージャ(Public)を追加して、
それを標準モジュールから呼び出すことが出来るのでしょうか?

質問内容のことを行いたいのです。
しかし、それ以前にThisWorkbookオブジェクト内にプロシージャを追加して、
それをThisWorkbookオブジェクト内から呼び出すことも今現在出来ていないません。
(ThisWorkbookオブジェクトにプロシージャの追加、またそれの呼び出しが可能か不可能かも分かっていません)

Aベストアンサー

ThisWorkbookの所に
Public Function test(A, B)
test = A + B
End Function
と記述したとしたら
標準モジュールから
Public Sub mtest()
dim ans
ans=ThisWorkbook.test(10, 20)
End Sub
のように呼び出せます

Qエクセル97・ワード97・アウトルック97が入ったCD-ROMを小屋から発見しました。何につかえるでしょうか?

小屋の中を整理していたら7年前に買った
エクセル97・ワード97・アウトルック97が入った一枚のCD-ROMを発見しました。
(オフィス○○○○とはどこにも書いてありません)
現在持っている自作パソコンでOEM版のXPホームはあるんですが
エクセルなど高いので買っていませんでしたので
これを気に自作パソコンにインストールしたいと思っています。
そこで質問なんですが。
(1)これはエクセル2003とかにアップグレードすることができるのでし ょうか?
(2)XPでも使えるのでしょうか?
(3)機能的に97は使えるのでしょうか?
(4)その他 何か教えてください

回答お願いします。

Aベストアンサー

追伸です。

http://www.microsoft.com/japan/office/system/upgrade.mspx#EAAA
97はぎりぎりアップグレード版の対象になっているようです。

QEXCEL2002で急に個人用マクロに登録してあるマクロが参照できなくなった

記録や編集したマクロを個人用マクロに登録して今まで使っていたのですが、今日EXCELを強制終了したとたんEXCELを起動すると今まで登録したマクロが入っているpersonal.xlsが立ち上がらなくなりました。
personal.xlsの存在は確認し、一度別の場所に移動して、再度登録しなおしたのですが、どうしても登録したマクロが参照できません。
どうしたらよいのでしょうか?
OSはXPです。

Aベストアンサー

モジュールを参照させていただきました。
モジュール自体はおっしゃるように正常ですね。
私も貼り付けを行ってみましたが、正常に動きました。
ボタンも仮のものですが、作成してみて動かしたところきちんと動きました。
そして、personal.xlsをxlstartフォルダより削除し、再度personal.xlsとして保存したら、きちんと動きました。

一応私の手順を書いてみますね。

1.Excelを新規で起動する。
2.ツールのマクロ→新しいマクロの記録→個人用マクロブック→「OK」をクリックする。
3.すぐさま記録終了をクリックする。
4.VBEを起動する。
5.personal.xlsの標準モジュールを開き「コードの貼り付け」を行う。
6.VBEの上書き保存を行う。
7.Excelに戻す。
8.ツールバーを新たに製作し、そのツールバーにボタンを製作し、そしてそのボタンにマクロの登録をする。(C予約マクロを登録しました。ユーザー設定を起動してます。)
9.Excelを×で閉じます。
10.「book1」を保存しますか?」は「いいえ」を選択します。
11.再度Excelを起動します。
12.Excelのシートは新規のシートですが、ツールバーは残っています。そして、ツールのマクロをあけてみると「PERSONAL.XLS!C予約」というマクロは存在しています。

というような状況です。
なので、もしこの手順と同様のことをされても無理、他のPCで同じ動作をしてみても無理とのことでしたら、私もお手上げ状態です。
すいません。

モジュールを参照させていただきました。
モジュール自体はおっしゃるように正常ですね。
私も貼り付けを行ってみましたが、正常に動きました。
ボタンも仮のものですが、作成してみて動かしたところきちんと動きました。
そして、personal.xlsをxlstartフォルダより削除し、再度personal.xlsとして保存したら、きちんと動きました。

一応私の手順を書いてみますね。

1.Excelを新規で起動する。
2.ツールのマクロ→新しいマクロの記録→個人用マクロブック→「OK」をクリックする。
3.すぐさま記録終了...続きを読む

QエクセルVBA:マクロの中にマクロ?

度々よろしくお願いします。ボタンが複数あって、それぞれに記録されたマクロの一部分が共通している場合の処理について教えてください。

例えば、前回の質問でご回答いただいたモノを流用し、別の処理と複合させたマクロがあります。
この変数ixがボタン(それぞれのマクロ)ごとに異なる場合、Do While以下を別のマクロとして記録し、それぞれのマクロの中で
Application.Run "TEST.xls!Macro1"などのようにできるのでしょうか?変数の扱いをどうして良いのかわかりません。

Sub test()
~別の処理

ix = 8

Do While Cells(ix, "D") <> ""
  Select Case Trim(Cells(ix, "D"))
  Case "背筋"
    Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  Case "アーム"
    Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  Case "レッグ"
    Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  End Select
  Range(Cells(ix, "I"), Cells(ix, "AW")).Copy
  Cells(ix, "I").PasteSpecial Paste:=xlPasteValues
  ix = ix + 1
Loop
Range("I8").Select
End Sub

度々よろしくお願いします。ボタンが複数あって、それぞれに記録されたマクロの一部分が共通している場合の処理について教えてください。

例えば、前回の質問でご回答いただいたモノを流用し、別の処理と複合させたマクロがあります。
この変数ixがボタン(それぞれのマクロ)ごとに異なる場合、Do While以下を別のマクロとして記録し、それぞれのマクロの中で
Application.Run "TEST.xls!Macro1"などのようにできるのでしょうか?変数の扱いをどうして良いのかわかりません。

Sub test()
~別の処理

...続きを読む

Aベストアンサー

#1さんのように変数渡しにするか、以下のように共通で使用可能な変数として定義するのがいいでしょう。

Dim ix As Long '共通で使用したい変数はモジュールの冒頭で定義します。
Sub test()
ix = 8
Call kyotsu1 '使用する共通コードの呼び出し
Range("I8").Select
End Sub

Sub kyotsu1
Do While Cells(ix, "D") <> ""
  Select Case Trim(Cells(ix, "D"))
  Case "背筋"
    Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  Case "アーム"
    Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  Case "レッグ"
    Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  End Select
  Range(Cells(ix, "I"), Cells(ix, "AW")).Copy
  Cells(ix, "I").PasteSpecial Paste:=xlPasteValues
  ix = ix + 1
Loop
End Sub

#1さんのように変数渡しにするか、以下のように共通で使用可能な変数として定義するのがいいでしょう。

Dim ix As Long '共通で使用したい変数はモジュールの冒頭で定義します。
Sub test()
ix = 8
Call kyotsu1 '使用する共通コードの呼び出し
Range("I8").Select
End Sub

Sub kyotsu1
Do While Cells(ix, "D") <> ""
  Select Case Trim(Cells(ix, "D"))
  Case "背筋"
    Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))
  Case "アーム"
    R...続きを読む


人気Q&Aランキング

おすすめ情報