Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13401 / 13646 ツリー ←次へ | 前へ→

【4933】XPの環境でPublic変数が初期化されてしまう。 まき 03/4/14(月) 16:11 質問
【4940】Re:XPの環境でPublic変数が初期化されてしま... bykin 03/4/14(月) 22:10 回答
【4941】Re:XPの環境でPublic変数が初期化されてし... まき 03/4/14(月) 22:35 回答
【4944】Re:XPの環境でPublic変数が初期化されてし... bykin 03/4/14(月) 23:09 回答
【4945】Re:XPの環境でPublic変数が初期化されてし... まき 03/4/14(月) 23:23 回答
【5172】いまだ解決していないです。 まき 03/4/24(木) 10:31 発言
【5178】Re:いまだ解決していないです。 ichinose 03/4/24(木) 12:25 発言
【5179】追伸 ichinose 03/4/24(木) 12:28 発言
【5203】試してみました。 まき 03/4/25(金) 11:13 発言
【5597】追加情報ありましたらお待ちしています。 まき 03/5/21(水) 15:45 発言

【4933】XPの環境でPublic変数が初期化されてしま...
質問  まき  - 03/4/14(月) 16:11 -

引用なし
パスワード
   はじまして、OFFICE2000 DeveloperのExcel VBAで作成したマクロがXP環境で
うまく動かなくて困っています。もし何か情報ありましたら教えてください。

■具体的なエラー内容
 XPの環境で、ブック間での関数の呼び出しを行うと、Openイベントで初期化した
 Public変数の値が値が消えてしまいます(intなら0、strなら"")。
 (Excel2000で動かす分には問題なく値は入ってきます。Excel XPの
  環境で動作させると上記のエラーが発生します。またXPで保存しなおした
  場合は上記エラーは発生しません。・・ですが、XPで保存しなおすやり方
  以外に方法があったら教えてください。)
 
■使用したファイル
 OFFICE2000 DeveloperのExcel VBA SR-1で作成しました。
 XPはパッチがあたっていない状態です。

 1. main.xls
  2. sub.xls

1. main.xls
===================================
(シートにボタンを張っています。)
>シートへのコマンドボタンの内容
Private Sub CommandButton1_Click()
  Workbooks.Open Filename:=("c:\sub.xls") ''←フルパスで指定
End Sub
===================================


2. sub.xls
===================================
''module1の内容
Public ptest As Integer ''テスト用変数の定義
===================================
''ワークシートのOPENイベント
Private Sub Workbook_Open()
  ptest = 1  ''変数の初期化
  MsgBox ("現在の変数の値は" & ptest & "です。") ''値の確認
End Sub
===================================
''シートへのコマンドボタンの内容
Private Sub CommandButton1_Click()
  MsgBox ("現在の変数の値は" & ptest & "です。") ''値の確認
End Sub
===================================

■エラーの確認
 main.xlsをマクロ有効で開いて、コマンドボタンをクリックすると
 sub.xlsがOPENされます。OPEN後に、sub.xlsのコマンドボタンを押すと
 メッセージボックスで"現在の変数の値は0です。"と表示されます。
 OPENイベントで ptest = 1 と設定した値が、初期化されているようです。
 ためしにXPで同じファイルを開いて保存しなおしたら動くようになりましたが、
 再保存をしない方法がないかと探しております。

■よろしくおねがいします。
 私が思いついたのは、呼び出しもと(main.xls)にPublic変数を定義して、
 参照設定する方法がありましたが、ソースの改修量が多く難しそうです。
 同じような事例や不具合報告など検索しましたがうまく見つかりませんでした。
 どなたか、対処方法等ご存知でしたら教えてください。

【4940】Re:XPの環境でPublic変数が初期化されてし...
回答  bykin  - 03/4/14(月) 22:10 -

引用なし
パスワード
   こんばんわ。

あんまし自信ないねんけど・・・(^^;;

main.xls のコードは↓こう変更して

Private Sub CommandButton1_Click()
  Workbooks.Open Filename:=("c:\sub.xls")
  ActiveWorkbook.RunAutoMacros xlAutoOpen
End Sub

sub.xls については
Private Sub Workbook_Open()
を全部削除してそのかわりに標準モジュールに

Sub Auto_Open()
  ptest = 1  ''変数の初期化
  MsgBox ("現在の変数の値は" & ptest & "です。")
End Sub

って書いたらうまいこといけへんかな?

同じ環境やないので実験はしてまへん。うまいこといかんかったらかんにんな。
ほな。

【4941】Re:XPの環境でPublic変数が初期化されてし...
回答  まき  - 03/4/14(月) 22:35 -

引用なし
パスワード
   ▼bykin さん:
どうも、回答ありがとうございました。

先ほど、エラーのおきる環境で、いただいたサンプルコードで実行してみましたが
状態変わらずで、初期化されてました。
うーん、マイクロソフトのバグでしょうか(-_-;)
動作させる環境がまずいのかもしれませんが、もう少し調査してみます。
ありがとうございました。

>こんばんわ。
>
>あんまし自信ないねんけど・・・(^^;;
>
>main.xls のコードは↓こう変更して
>
>Private Sub CommandButton1_Click()
>  Workbooks.Open Filename:=("c:\sub.xls")
>  ActiveWorkbook.RunAutoMacros xlAutoOpen
>End Sub
>
>sub.xls については
>Private Sub Workbook_Open()
>を全部削除してそのかわりに標準モジュールに
>
>Sub Auto_Open()
>  ptest = 1  ''変数の初期化
>  MsgBox ("現在の変数の値は" & ptest & "です。")
>End Sub
>
>って書いたらうまいこといけへんかな?
>
>同じ環境やないので実験はしてまへん。うまいこといかんかったらかんにんな。
>ほな。

【4944】Re:XPの環境でPublic変数が初期化されてし...
回答  bykin  - 03/4/14(月) 23:09 -

引用なし
パスワード
   こんばんわ。

あきまへんか・・・
ダミーのワークシートに変数を保存するなんて方法はあかんかな?
スマートな方法とは思わんけど(^^;;

やっぱりXPで保存しなおすのが一番確実かも知れまへんな〜

お力になれずすんまへん。
ほな。

【4945】Re:XPの環境でPublic変数が初期化されてし...
回答  まき  - 03/4/14(月) 23:23 -

引用なし
パスワード
   ▼bykin さん:

>ダミーのワークシートに変数を保存するなんて方法はあかんかな?
>スマートな方法とは思わんけど(^^;;

そうですね。
ちょっと変数の数が多いのでpublic変数の管理が
むずかしそうですね。
実は、subとして呼ばれるファイルが15ファイルほどあるので・・

>やっぱりXPで保存しなおすのが一番確実かも知れまへんな〜
XPの場合に起動した際に、自動で再保存する方法も考えてみてみます。

>お力になれずすんまへん。
いえいえ、アドバイスどうもありがとうございました。

【5172】いまだ解決していないです。
発言  まき  - 03/4/24(木) 10:31 -

引用なし
パスワード
   本件、マイクロソフトさんに障害として報告しましたが、報告したユーザへのフィードバックは特に行わないそうです。
まだ解決できていないのですが、同じような事象が出ていて、こうしたら解決した等の情報ございましたらよろしくお願いいたします。

【5178】Re:いまだ解決していないです。
発言  ichinose  - 03/4/24(木) 12:25 -

引用なし
パスワード
   ▼まき さん:
こんにちは。

>本件、マイクロソフトさんに障害として報告しましたが、報告したユーザへのフィードバックは特に行わないそうです。
>まだ解決できていないのですが、同じような事象が出ていて、こうしたら解決した等の情報ございましたらよろしくお願いいたします。
私にとっても非常に興味のあるご質問なんですが・・・。
特定のバージョンに限らず、変数の中身が消えてしまうということは言われていました。
対処法は、「セルにデータを保管しておく」という事だったと思います。
でも、オブジェクト変数だったらどうするんだろう?とも思いますが・・・。
まきさんの場合、コードの大きな変更をしたくないのですよね。
見せていただいたptest(Integer)の場合なら、マクロが書かれているブックの適当なセルに保管する方法でどうでしょうか。
Public変数であるPtestを宣言している標準モジュールに
'====================================================
Property Get ptest() As Integer
  With ThisWorkbook.Worksheets(1)
   ptest = .Cells(1, 1).Value
   End With
End Property
'====================================================
Property Let ptest(par As Integer)
  With ThisWorkbook.Worksheets(1)
   .Cells(1, 1).Value = par
   End With
End Property

セルのアドレスは一例ですが。
こうしておけば、Ptestというコードを書き直さなくて済むかもしれません。
確認してみて下さい。

【5179】追伸
発言  ichinose  - 03/4/24(木) 12:28 -

引用なし
パスワード
   ▼ichinose さん:
>▼まき さん:
>こんにちは。
>
>>本件、マイクロソフトさんに障害として報告しましたが、報告したユーザへのフィードバックは特に行わないそうです。
>>まだ解決できていないのですが、同じような事象が出ていて、こうしたら解決した等の情報ございましたらよろしくお願いいたします。
>私にとっても非常に興味のあるご質問なんですが・・・。
>特定のバージョンに限らず、変数の中身が消えてしまうということは言われていました。
>対処法は、「セルにデータを保管しておく」という事だったと思います。
>でも、オブジェクト変数だったらどうするんだろう?とも思いますが・・・。
>まきさんの場合、コードの大きな変更をしたくないのですよね。
>見せていただいたptest(Integer)の場合なら、マクロが書かれているブックの適当なセルに保管する方法でどうでしょうか。
>Public変数であるPtestを宣言している標準モジュールに
>'====================================================
>Property Get ptest() As Integer
>  With ThisWorkbook.Worksheets(1)
>   ptest = .Cells(1, 1).Value
>   End With
>End Property
>'====================================================
>Property Let ptest(par As Integer)
>  With ThisWorkbook.Worksheets(1)
>   .Cells(1, 1).Value = par
>   End With
>End Property
>
>セルのアドレスは一例ですが。
>こうしておけば、Ptestというコードを書き直さなくて済むかもしれません。
>確認してみて下さい。

標準モジュールに宣言していた
public ptest as integer
は、削除です。

【5203】試してみました。
発言  まき  - 03/4/25(金) 11:13 -

引用なし
パスワード
   ▼ichinose さん:
 サンプルソースの方、ありがとうございました。
 早速試したところXP環境で動作の方確認できました。
 変数に格納できないのはかなり厳しいですが、パブリック変数をメインのブックに集約せずにすみそうです。
 ありがとうございました。
  
 マイクロソフトから、修正版パッチが出ると良いのですが、なかなか難しいですね。
 同様の不具合(?)って発生してるんですね。知りませんでした。

>▼ichinose さん:
>>▼まき さん:
>>こんにちは。
>>
>>>本件、マイクロソフトさんに障害として報告しましたが、報告したユーザへのフィードバックは特に行わないそうです。
>>>まだ解決できていないのですが、同じような事象が出ていて、こうしたら解決した等の情報ございましたらよろしくお願いいたします。
>>私にとっても非常に興味のあるご質問なんですが・・・。
>>特定のバージョンに限らず、変数の中身が消えてしまうということは言われていました。
>>対処法は、「セルにデータを保管しておく」という事だったと思います。
>>でも、オブジェクト変数だったらどうするんだろう?とも思いますが・・・。
>>まきさんの場合、コードの大きな変更をしたくないのですよね。
>>見せていただいたptest(Integer)の場合なら、マクロが書かれているブックの適当なセルに保管する方法でどうでしょうか。
>>Public変数であるPtestを宣言している標準モジュールに
>>'====================================================
>>Property Get ptest() As Integer
>>  With ThisWorkbook.Worksheets(1)
>>   ptest = .Cells(1, 1).Value
>>   End With
>>End Property
>>'====================================================
>>Property Let ptest(par As Integer)
>>  With ThisWorkbook.Worksheets(1)
>>   .Cells(1, 1).Value = par
>>   End With
>>End Property
>>
>>セルのアドレスは一例ですが。
>>こうしておけば、Ptestというコードを書き直さなくて済むかもしれません。
>>確認してみて下さい。
>
>標準モジュールに宣言していた
>public ptest as integer
>は、削除です。

【5597】追加情報ありましたらお待ちしています。
発言  まき  - 03/5/21(水) 15:45 -

引用なし
パスワード
   Public変数が異なるOfficeの環境で初期化されてしまうエラーについて、パッチ等情報ありましたらお願いいたします。

下名調べたところではまだ見つからないです。なかなかバグ情報を検索するのは難しいですね。

13401 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free