Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2016)
質問します。
投稿日時: 22/12/21 21:35:31
投稿者: tsaimen

マクロが含まれたファイルですが、あるパソコン(win10,メモリー4G)で「オートメーションエラー」が発生します。他のパソコン(メモリー8G)では正常に動きます。これって、メモリーの問題でしょうか?動かなかったパソコンのメモリーを8Gにあっぷすれば解決するでしょうか?

回答
投稿日時: 22/12/21 22:48:52
投稿者: WinArrow

私見では、物理的なメモリの問題ではないと思います。
   
オートメーションエラーは、全て同じ現象をないので、
一概にこれだ!・・・と特定することは無理です。
   
私が、出くわした事象
32bitExcelでは、このエラーになるが、
64BitExcelでは、正常に動く。
   
いろいろ調べたら、プロシジャ内のステップ数が多いことがわかったが、
それ以外の副産物を得ろことができました。。
  
VBA実行時は、プロシジャのコード実行前に、、
当該プロシジャで使用する変数をメモリ内にマッピングします。
リテラルも、固定地としてメモリ内にマッピングされる。
例えば、
 If DATA = "ABC”Then
の「ABC」
メモリ上は1つの領域が必要です。
そして、別の場所に
 Cells(1,1).Value = "ABC"
とあると、別の領域が必要になります。
人間は1つあれば・・・と考えますが、2つ確保されます。
   
Consst ABC AS String = "ABC"
   
と定義すれば、メモリとしては1つの領域で済みます。
   
   
DATA = "AAAAAAA"
DATA = DATA & "XYZZZZ"
のようなコードの場合、メモリという観点で見た時、
最初の変数:DATA と 2番目のDATAの領域は違います。
2番目のDATAが正常に終了するまで、2つの領域が存在します。
    
こんな観点で、メモリを減らす工夫をしてみたら如何でしょう。
もちろん、ステプ数自体を減らす工夫・努力も忘れずに!!!

投稿日時: 22/12/23 00:29:31
投稿者: tsaimen

有り難うございます。付け加えですが、「オートメーションエラー」がでるパソコンではマクロを認識しないのですが、・・・・なのでメモリーを増やせばと思いました。

回答
投稿日時: 22/12/23 08:20:36
投稿者: Suzu

なぜ そのエラーが 発生するのかは
コードや、実際にどのステップでエラーが発生するのかが判らないと何とも言えません。
 
私も、メモリーの多い 少ない が 直接の原因ではないと思います。
 
 
 

引用:
「オートメーションエラー」がでるパソコンではマクロを認識しない

認識 しない と言うのはどのような状態から、そう判断されているのでしょうか?
 
認識し、マクロ(VBA)が実施され その中のどこかでオートメーションエラーが発生します。

投稿日時: 22/12/24 07:16:33
投稿者: tsaimen

マクロを認識しないというのはマクロがみえないということです。マクロを開くにしてもマクロが出てきません。

回答
投稿日時: 22/12/24 10:17:40
投稿者: WinArrow

tsaimen さんの引用:

マクロを認識しないというのはマクロがみえないということです。マクロを開くにしてもマクロが出てきません。

 
>マクロが見えない
とは、
VBE画面が表示されない
ということですか?
感覚的な表現ではなく、
回答者は、あなたのPCの画面は見えないので、
操作レベルの表現(例えば、画面の名称とボタンなどの名称)を
してください。
 
 
>マクロを開く
とは、具体的にどのような操作ですか?

投稿日時: 22/12/24 20:13:29
投稿者: tsaimen

はい、具体的に書きます。エクセルの画面で「表示」→「マクロ」→「マクロの表示」とクリックしたときに、マクロが表示されていない。ということです。よろしいでしょうか。

回答
投稿日時: 22/12/24 21:03:51
投稿者: WinArrow

tsaimen さんの引用:

はい、具体的に書きます。エクセルの画面で「表示」→「マクロ」→「マクロの表示」とクリックしたときに、マクロが表示されていない。ということです。よろしいでしょうか。

 
ありがとうございます。
モジュールの記述方法で、マクロは存在するが、この画面に表示されないことはあります。
この画面に表示されるマクロ(プロシジャ)は、
標準モジュールに記述したプロシジャです。
その中で、
@「Pubulic属性」であること
A引数がないこと
という条件です。
 
例えば、Workbook_Openイベントプロシジャ(ブック開いたとき)は、
この画面には、表示されません。
 
少なくとも
「オートメーションエラー」が出るということは、
Workbook_Openプロシジャの中で、
何らかの不具合(コードの記述の問題?)が発生していることが推測されます。
 
マクロを表示する(VBE画面の表示)には、
「開発」タブの左端「VisualBasic」を使いましょう。
または、[Ctrl]+[F11]を使ってもよいです。
(ショートカットキー)
 
 

回答
投稿日時: 22/12/24 22:26:12
投稿者: WinArrow

>「表示」→「マクロ」→「マクロの表示」とクリックした
 
ということは、
「オートメーションエラー」
が、出た後の操作・・・と解釈してよいのですか?

投稿日時: 22/12/25 00:19:50
投稿者: tsaimen

そうです。なにか操作を行って「オートメーションエラー」が出てマクロの表示を確認しました。そうするとなにも表示されていないというわけです。

回答
投稿日時: 22/12/25 09:56:58
投稿者: WinArrow

tsaimen さんの引用:

そうです。なにか操作を行って「オートメーションエラー」が出てマクロの表示を確認しました。そうするとなにも表示されていないというわけです。

 
いままでの説明で、多少経緯が分かってきましたが、
基本的に
>「表示」→「マクロ」→「マクロの表示」
は、マウロを実行するために用意してある機能です。
この画面では、全てのマクロ(プロシジャ)が表示されているわけではありません。
コードを閲覧/更新するには、「Alt]+[F11]を使ってVBE画面に遷移してください。
先ほど[Ctrl]+]F11]と書きましたが、間違いです。
 
ブックを開いたら、「オートメーションエラー」がでた。
ということでしたら
VBEの画面で「Thisworkbook」モジュールの中に「Workbook_Open()」
というプロシジャがあると思います。
そのプロシジャの中(どこでもよい)にカーソルを置き
「F8」を押しながら、ステップ実行(1行づつ進んでいく)を実施してみてください。
おそらく、その中のどこかでエラーが発生すると思います。
そのコードは、エラー検知の場所であって、それだけで、
原因を特定することはできないと思います。
 
 
 
 
 

回答
投稿日時: 22/12/25 12:02:11
投稿者: WinArrow

参考
「表示」→「マクロ」→「マクロの表示」
で表示されるマクロの例を下記します。
 
標準モジュールの
Module1
に次のようなコードを記述したと仮定します。
 
この状態で、画面委は、[MACRO1]しか表示されません。
また、2行のコメントアウトのコードをコメントを外すと、全プロシジャg標示されません。
なお、
Sub MACRO1()
は、
Oublic Sub MACR1()
と記述しても同じです。
 
 

Option Explicit
'Option Private Module

Sub MACRO1()

End Sub

Private Sub MACRO2()

End Sub

Public Sub MACRO3(ByVal xyx As stting)

End Sub

Public Function HHH()

End Function

投稿日時: 22/12/25 19:41:17
投稿者: tsaimen

有り難うございます。VBAについては印刷マクロぐらいしか作ることができないので、書かれてことは実はほとんど理解できないのが実情です。問題のファイルは今ここにはありませんので、1月中旬になるとそのファイルを開き、対処することができます。色々考えていただき、有り難うございます。感謝しています。

回答
投稿日時: 22/12/26 12:04:35
投稿者: Suzu

「表示」→「マクロ」→「マクロの表示」
で 表示される のは
 
標準モジュール の Public Sub で始まるプロシージャです。
 
VBE画面を表示し、Ctr+R で プロジェクトエクスプローラーを表示し、
 VBAProject(当該ファイル名)
   +-Micorosoft Excel Object
   | +-- Sheet1 (シート1名)    ← ★
      | |-- Sheet2 (シート2名)    ← ★
      | |--  :
   | |-- SheetX (シートX名)    ← ★
   | +-- ThisWorkBook       ← ★
   |
   +-標準モジュール     ← ここの Public Sub や、単に Sub で始まるプロシージャが
     +- Module1         マクロの表示に表示される
 
今回は、標準モジュールではなく、★ の中に 何かしらのプロシージャ が指定してある状態であり
何かしらのイベントに関連づき そのプロシージャが実行されている状態。
そのコードに問題があり「オートメーションエラー」が発生している状況 だと推測されます。
 
オートメーションエラーが表示されない様にしたいだけなら
★ の コードを コメントアウトするなり、削除すれば、オートメーションエラーは発生しません。
 
もちろん、コードで何かしらの操作をしようとしていた操作は実行されません。
 
なので、メモリーが少ないのが原因ではなく、
コードに原因があると思われるので、そのコードの内容が判らないと
オートメーションエラーの原因は判らないと言っています。

回答
投稿日時: 22/12/26 15:47:10
投稿者: WinArrow

tsaimen さんの引用:

有り難うございます。VBAについては印刷マクロぐらいしか作ることができないので、書かれてことは実はほとんど理解できないのが実情です。問題のファイルは今ここにはありませんので、1月中旬になるとそのファイルを開き、対処することができます。色々考えていただき、有り難うございます。感謝しています。

 
いままでの話から推察すると
>印刷マクロを作ることができる
と表現していますが、
「マクロの記録」を実施することで、簡単にマクロは作成できます。
そのままの状態でも立派に動き、目的を達成することも可能です。
出来上がったコードを何も修正せず利用している
ということではないかと思われます。
 
前レスでも書きましたが、
他人に状況を伝える時は、感覚的な表現では、自分の意志・意図が伝わらないことが
多いです。
 
>印刷マクロを作ることができる
と表現すると、おそらく誤解されると思います。
 
問題のファイルは、自分で作成したのではない、思います。
VBE画面のコードを1行毎、掲示板で質問しても、
その背景や目的が分からないと、回答が難しい。
作成者に相談することをお勧めします。
 
 
 
 
 
 
 

トピックに返信