• 締切済み

OLEオブジェクト(EXCELGraph)が動作する際のセキュリティ警告について

フォームにOLEオブジェクトでEXCELグラフを表示しています。 グラフによってY軸やデータの値が変わるため、再描画するようにマクロを組みました。 そのため、セキュリティ警告が表示されるようになってしまい困っています。 過去ログ等調べた結果、AutomationSecurityで制御できるようなのですが、OLEオブジェクトにも有効でしょうか? 過去ログ等見ながら試してみましたがお手上げです。 どのように記述したら良いかご教授願えませんでしょうか。 よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 もしかしたら、構造的な部分で違うのかもしれませんね。 >fn = OutExcel.SourceObject 具体的なファイル名 #1のお礼の部分 >xl.Workbooks.Open Filename:="c:\temp\test.xls" 'マクロがあるファイル の"c:\temp\test.xls"  を入れてみたらいかがですか? あえて、私は、オブジェクトから採ろうとしたから、そのようなコードにしたわけですが。 ただ、この件は、もう一度、調べてみます。

lacky_momo
質問者

お礼

Wendy02さん、何度もありがとうございます。 私の方も明日再度チャレンジしてみます。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 このようにして、相手のExcelは開くことが可能です。 ただ、セキュリティに関しては、別のセキュリティ・プログラムが働いていることがあるので、完全とはいえません。以下は、最後まで確認されてはいません。 なお、本来は、保存させないと、Access 側のグラフ自体は変わらないのではないかと思います。現状では、Excelが開いて、Excel側のグラフのみが変更されることを確認しているだけです。 Private Sub コマンド1_Click() Dim OutExcel As Object Dim fn As String Dim xl As Object Set xl = CreateObject("Excel.Application") Set OutExcel = Me.A06_1_共通範囲![非連結OLE90] fn = OutExcel.SourceObject xl.AutomationSecurity = 1 xl.Workbooks.Open fn xl.Visible = Visible With xl.Worksheets("sheet1") 'ここに書き込みデータ End With Set xl = Nothing End Sub

lacky_momo
質問者

お礼

おはようございます。 まだ検証していませんが、先にお礼を述べさせて下さい。 貴重なお時間を割いて頂き本当にありがとうございました。 後ほど結果報告させて頂きます。

lacky_momo
質問者

補足

Private Sub コマンド1_Click() Dim OutExcel As Object Dim fn As String Dim xl As Object Set xl = CreateObject("Excel.Application") Set OutExcel = Me.A06_1_共通範囲![非連結OLE90] fn = OutExcel.SourceObject xl.AutomationSecurity = 1 xl.Workbooks.Open fn xl.Visible = Visible With xl.Worksheets("sheet1") 'ここに書き込みデータ End With Set xl = Nothing End Sub 上記組み込んで見ましたが、 fn = OutExcel.SourceObject ここで、fnが "" になってしまい、 xl.Workbooks.Open fn ここでエラーになってしまいました。 やはり、無理があるのでしょうか・・・

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 #1の回答者です。 話は見えてきました。 今は、コードを読んだだけで、その回答が見えてきていません。 でも、 Set OutExcel = Me.A06_1_共通範囲![非連結OLE90] これは、Access側のオブジェクトですね。何か、オブジェクトの存在自体が、不思議というか、なにぶんにも、こういうことはやったことがありませんし、考え方自体が、まるで違いますので、戸惑っています。単にセキュリティの問題ではないような気がしています。 OutExcelで、本体が取れればよいのですが、そんなことは考えたことがありません。 今は、 Set xl = CreateObject("Excel.Application") で、ブックのシートを取得し、そこにデータを送り込んで、保存してしまえば、後は、当然、OLEになっていますから、データは更新されると考えています。一応、特殊なプロテクトになっていなければ、  xl.AutomationSecurity は使えるはずです。 OutExcel.Worksheets("sheet1").Cells(i + 2, 1) = CSng(Me.A06_1_共通範囲("テキスト3" & i)) ここで、Excel側にデータをAccessのテキストボックスから送り出そうとしていますね。(送られているのかはわからないけれども) ということは、たぶん、Excel側のブックは更新したら保存しておかなくてはならない、ということでしょうね。(目が白黒してきます。(^^;) 少し、時間をくださいますか? 別の回答者の方が、お答えになれば、また、それでもよいですが。

lacky_momo
質問者

お礼

Wendy02さん、再度のご回答ありがとうございます。 > OutExcel.Worksheets("sheet1").Cells(i + 2, 1) = CSng(Me.A06_1_共通範囲("テキスト3" & i)) > ここで、Excel側にデータをAccessのテキストボックスから送り出そうとしていますね。(送られているのかはわからないけれども) > ということは、たぶん、Excel側のブックは更新したら保存しておかなくてはならない、ということでしょうね。(目が白黒してきます。(^^;) データは、Excelに書き込まれていて、このデータによりY軸の値を変更してグラフの書き換えも出来ています。 が、Excel側でのデータ保存は必要ありません。 Accessで確認のための表示が出来れば良いだけなんです。 本来、このような使い方はしないだろうな、と私も思っているのですが何分クライアントの要望なので拒否も出来ず・・・ 自宅でネットしていないため、次回閲覧できるのは2/18になります。 他力本願で申し訳ありませんが、よろしくお願い致します。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 回答ではありませんが、 >フォームにOLEオブジェクトでEXCELグラフを表示しています。 この説明が良く分からないのです。 たぶん、私の技術力が不足しているせいなのだとは思います。 フォームというのは、UserForm のことだと思います。それとも、Access ですか? 通常、ワークシートのグラフを画像で出力してから、それを、UserForm 上のImage を LoadPicture で呼ぶか、最初から、WebコンポーネントのChartSpace で、Excelのワークシートのデータをデータベース用に替えて、それを、ChartSpace にリンクして表示するか、いずれかのような気がします。 いきなり、そういう作業をせずに、OLEオブジェクトで表示するというのは、どのようにしているのですか?OLEObject 自体は、個別の意味ではありません。その何か具体的なコントロールを経由しているはずですが。今、インターネット検索してみましたが、そういう方法は出てきません。 >AutomationSecurityで制御できるようなのですが、OLEオブジェクトにも有効でしょうか? それは、一応、VBA側と同じはずですから、有効だとは思うのですが、元のセキュリティレベルを、その読み出しのときだけ下げれば、それは、有効だし、お試しになれば分かるはずですが。 >どのように記述したら良いかご教授願えませんでしょうか。 元が再現できないので、難しいですね。どんなコードを使っているのでしょうか?

lacky_momo
質問者

お礼

Wendy02さん、お返事ありがとうございます。 説明不足で申し訳ありません。 フォームはAccessのフォームです。 そのフォームに、[挿入]→[オブジェクト]→[Microsoft Excel グラフ]を選択し、グラフを貼りました。 Dim OutExcel As Object Set OutExcel = Me.A06_1_共通範囲![非連結OLE90] OutExcel.Worksheets("sheet1").UsedRange For i = 1 To 5 OutExcel.Worksheets("sheet1").Cells(i + 2, 1) = CSng(Me.A06_1_共通範囲("テキスト3" & i)) OutExcel.Worksheets("sheet1").Cells(i + 2, 3) = CSng(Me.A06_1_共通範囲("テキスト1" & i)) OutExcel.Worksheets("sheet1").Cells(i + 2, 2) = CSng(Me.A06_1_共通範囲("テキスト2" & i)) Next OutExcel.Worksheets("Sheet1").Activate 'auto_open実行 OutExcel.Charts("Graph1").Activate '表示をGraphにする Me.A06_1_共通範囲![非連結OLE90].Class = "excel.Graph1" With Me.A06_1_共通範囲!非連結OLE90 .Enabled = True .Locked = False .Action = acOLEUpdate End With 上記のプロシージャで、グラフの書き換えを行っています。 過去ログから以下のサンプルを見つけたので、これを使用すれば良いのだろうと試してみたのですが、正直、ExcelVBAをよくわかっていなためお手上げになってしまいました。 Dim xl As Object Set xl = CreateObject("Excel.application") Xl.Visible = False xl.AutomationSecurity = msoAutomationLow xl.Workbooks.Open Filename:="c:\temp\test.xls" 'マクロがあるファイル xl.Quit Officeのバージョンは、2002です。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A