[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/07/02(Mon) 13:08
投稿者名:おじん
Eメール:
URL :
タイトル:
マクロが組み込まれたエクセルファイルを読む
マクロが組み込まれたエクセルファイルを読んでVBにデータを取り
込みたい。この際、オペレータの操作を極力少なくするために、
下記サンプル(いずれもこのサイトのサンプルを参照)で試みたの
ですが、マクロが無い場合はよいのですが、マクロがあると、

1.の場合、
  a.マクロの有効/無効のダイアログを表示
  b.マクロ内にある「メニューフォ−ム」を表示
  c.データ保存の有無の問い合わせダイアログを表示
2.の場合、
  1の場合の、b,cを表示します。

これら「不要な表示」をなくするにはどうしたらよいのでしょうか。
なお、マクロは有効にしなければなりません。
よろしくご指導ください。

WinXP,VB6(sp5)
Micro Office 11.0 Object Library
Excel 2003

試行1. Sample 012 を参照した
  Dim xlApp  As Workbook
  Dim xlFile  As String
  Dim xlSheet As String
  
  'エクセルのファイル名
  xlFile = APP.Path & "\test.xls"
  xlSheet = "Print"  'ブックのシート名
  
  Set xlApp = GetObject(xlFile, "Excel.Sheet")

  Dim tmp
  With xlApp.Worksheets(xlSheet)
    'セルデータを操作
    tmp = tmp & Val(.Range("B12")) & vbCrLf


試行2. エクセルを操作(その1)既存のエクセルファイルを開くから
  Dim xlApp  As Excel.Application
  Dim xlBook  As Excel.Workbook
  Dim xlFile  As String
  Dim xlSheet As String
  
  'エクセルのファイル名
  xlFile = APP.Path & "\test.xls"
  xlSheet = "Print" 'ブックのシート名 
  
  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open(xlFile, ReadOnly:=True)

  Dim tmp
  With xlApp.Worksheets(xlSheet)
    'セルデータを操作
    tmp = tmp & Val(.Range("B12")) & vbCrLf

投稿時間:2007/07/02(Mon) 15:23
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re: マクロが組み込まれたエクセルファイルを読む
おじんさん、こんにちは
貴方のコードをよく読まずに答えますので、具体的な書き方は調べてください。


> これら「不要な表示」をなくするにはどうしたらよいのでしょうか。

 Application.DisplayAlerts = False

> なお、マクロは有効にしなければなりません。

 Application.EnableEvents = True

両者独立した操作ですので、この組み合わせで良いでしょう。

投稿時間:2007/07/02(Mon) 16:38
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^2: マクロが組み込まれたエクセルファイルを読む
いつものことながら、早速ありがとうございます。

> 貴方のコードをよく読まずに答えますので、具体的な書き方は調べてください。
そのとおりです。ここの「VBでエクセルを操作する(その1)」の記事にも
保存確認のメッセージ・・・どこかに記入してください。と指導してくれて
います。どこかに、と。安易に教えることは質問者のためには良いことではない
とおじんも思います。考える力が育ちませんから。

CreateObject,GetObjectの前後に試行錯誤はしてみたのですがダメで、一つだけ
試していないところがありました。それは、Quitの前後です。
Application.DisplayAlerts=FalseをQuitの直前に入れて「表示されなく」なり
ました。一つ解決。ありがとうございました。

>  Application.EnableEvents = True
こちらは未解決です。
1.の試行において「マクロ有効/無効のダイアログを表示しない(またはさ
せない)」しかしマクロは有効にしたい。無茶苦茶な気がしますが、そうやり
たいのです。
2.の試行は資料にあるように「そのダイアログ」は表示されませんので、あ
とは、マクロを有効にする(と次のこと)だけです。

そしていま一つ、マクロの中に組んであるおそらくMain関数だと思うのですが
その実行(メニューフォームの表示)をしないようにするには。中身はファイ
ル提供者のセキュリティのため未開示です。

どこかに記入してください、と言われるとおり、がんばってみます。

お手を煩わせてしましました。ありがとうございました。

投稿時間:2007/07/02(Mon) 19:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: マクロが組み込まれたエクセルファイルを読む
> 保存確認のメッセージ・・・どこかに記入してください。と指導してくれて

保存処理をするまでに、どこかに記入して下さい。 と書いていますよ。
当然Excelを起動してファイルを保存できる状態〜保存するまでの間と言う事です。
下記でもそのように使っていますよ。
http://hanatyan.sakura.ne.jp/vbhlp/Excel01.htm

> 1.の試行において「マクロ有効/無効のダイアログを表示しない(またはさ
下記のようにして起動すればマクロの警告のダイアログは表示されない筈ですが。
http://hanatyan.sakura.ne.jp/vbhlp/Excel01.htm
この事は先程の どこかに記入して下さい の上に書いてあったかと。

> そしていま一つ、マクロの中に組んであるおそらくMain関数だと思うのですが
> その実行(メニューフォームの表示)をしないようにするには。中身はファイ

この[メニューフォーム]とはどのようなものでしょうか?それが解らないので!

投稿時間:2007/07/03(Tue) 04:40
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^4: マクロが組み込まれたエクセルファイルを読む
ありがとうございます。
> 保存処理をするまでに、どこかに記入して下さい。 と書いていますよ。
> 当然Excelを起動してファイルを保存できる状態〜保存するまでの間と言う事です。
  Application.EnableEvents = False 'True  'マクロ有効
  Application.DisplayAlerts = False '保存確認
の2つを思いつくところにコーディングしてテストしていました(テスト方法の
不適切)、それぞれ単独に挿入しテストすべきだった。
保存確認の方は、Open後ならどこでもよいです。
ダンボ様の「両者独立した操作ですので、この組み合わせで良いでしょう。」という
アドバイスを理解できなかった、守らなかったようです。申し訳ありません。

> 下記でもそのように使っていますよ。
> http://hanatyan.sakura.ne.jp/vbhlp/Excel01.htm
こちらのサンプルも読ませていただきましたが、使い方が分からなくてテストを
していませんでした。分からないとは、このコーディング例で、
「ファイル名」「シート名」をどこに、どのようにセットすればよいのか。
言い換えると、既存のファイル、シートの処理ではない、と理解したのです。

1.の方法
  Application.EnableEvents = False     'マクロ無効
  Set xlApp = GetObject(xlFile, "Excel.Sheet")
  Application.DisplayAlerts = False '保存確認
  有効/無効のフォームがでてしまう。
2.の方法
  Application.EnableEvents = False     'マクロ無効
  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open(xlFile, ReadOnly:=True)
  Application.DisplayAlerts = False '保存確認
  メニューフォームも出なくなり、見かけ上はパーフェクトです。しかし、
  組み込まれたマクロが実行されているかどうか不明です。今日調べようと
  思っています。
  「マクロ無効」とはダイアログを表示しないだけではなく、そのマクロを
  実行しないことのように思うのですが?。ならばマクロを実行させるため
  にはどうしたらよいのか。マクロを実行させれば「メニュー」が表示され
  てしまう。

> この[メニューフォーム]とはどのようなものでしょうか?それが解らないので!
複数のシートがあり、どのシートの入力をするか、いわゆるメニュー形式になっ
ています。またパスワード、処理上のキーコードなど入力などをするフォーム。

皆さんにはご迷惑をおかけします。おじんには重たすぎる問題かもしれません。

投稿時間:2007/07/04(Wed) 08:15
投稿者名:YK
Eメール:
URL :
タイトル:
Re: マクロが組み込まれたエクセルファイルを読む
こんにちは。

> これら「不要な表示」をなくするにはどうしたらよいのでしょうか。
一つの安としてエクセルの標準モジュールにAuto_Openを作成して
その中にWorkbook_Openのコードを書きWorkbook_Openの中身を消す。

投稿時間:2007/07/04(Wed) 17:04
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^2: マクロが組み込まれたエクセルファイルを読む
ありがとうございます。
説明不足なところがありました。実はこのエクセルファイルは依頼者から
のものでエクセルファイルのモジュールをいらうことはできません。また
現在も、マクロにはロックがかかっていてどうなっているか分かりません。
動かしていて「そうなる=メニューのフォームが表示される&セル代入・
計算をしている」ということです。フォーム表示が操作者の介入が必要に
なり、これが邪魔。なにせ、予定では390ファイルのデータを変換しな
ければなりません。

色々やってみて、結論として、2.の方法で読む『(マクロ有効・無効の
ダイアログを表示しない:恐らくマクロ無効で起動すると思われます)
(保存確認のダイアログを表示しない)』。
そして、依頼者に「マクロの内容を聞きく」か、「推測して(可能です)」
それをVBで実行する。

> 一つの安としてエクセルの標準モジュールにAuto_Openを作成して
> その中にWorkbook_Openのコードを書きWorkbook_Openの中身を消す。
教えていただきながら、おじんにはとても手が付けらそうもないこと
です。いつかのためにメモだけはしておきます。
ありがとうございました。またよろしくご教授ください。