Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
非連結オブジェクトフレームに表示するファイルの設定の件
投稿日時: 22/06/22 18:18:50
投稿者: アロハ

いつもお世話になっております。
 
フォーム上に非連結オブジェクトフレームを配置して、エクセルのシートを表示しようとしています。
設定方法(VBA)を調べてみましたが、うまくいかないので質問させていただきます。
 
@非連結オブジェクトフレームを最初に配置したときに指定したエクセルファイルから変更できない。
Aヘルプ通りにVBAを実行してもエラーになる。(.Action指定時)
Bファイルを指定するアクションを起こすまでは非連結オブジェクトフレームには何も表示したくないが、空欄にできない。
 
Sub Command1_Click
 OLE1.Class = "Excel.Sheet" ' Set class name.
 ' Specify type of object.
 OLE1.OLETypeAllowed = acOLELinked
 ' Specify source file.
 OLE1.SourceDoc = "C:\Excel\Oletext.xls"  ←変化なし
 ' Specify data to create link to.
 OLE1.SourceItem = "R1C1:R5C5"
 ' Create linked object.
 OLE1.Action = acOLECreateLink       ←エラーになる
 ' Adjust control size.
 OLE1.SizeMode = acOLESizeZoom
End Sub
 
上記はヘルプを参照しておりますが、何が間違っているでしょうか。
 
 
ご指導ご鞭撻のほど、よろしくお願いします。

回答
投稿日時: 22/06/23 10:55:27
投稿者: Suzu

Enable/Lockedプロパティはどうなっていますか?
 
ObjectFrame.Action プロパティ (Access)
https://docs.microsoft.com/ja-jp/office/vba/api/access.objectframe.action
 

引用:
コントロールの " Enabled /使用可能" プロパティが [No/いいえ] に設定されているか、" Locked /編集ロック" プロパティが [Yes/はい] に設定されている場合は、 Action プロパティの設定値の中に、使用不能なものがあります。 次の表に、このような条件で使用可能な設定値および使用不能な設定値を示します。

 
 
 
前回
フォームにエクセルシートのプレビュー表示の件
https://www.moug.net/faq/viewtopic.php?t=81578
 
再度
引用:
Excelへの操作は VBAで行っているのであれば、その結果を フォーム上で見せる必要があるか疑問です。
 何か問題が発生しうるから、表示し、確認してもらう必要があるのでしょうか?
  
 だとすれば、その処理自体に問題があるのですから、それを是正するのが優先と思います。

投稿日時: 22/06/27 09:54:38
投稿者: アロハ

Suzu様
 
コメントありがとうございます。

引用:
Enable/Lockedプロパティはどうなっていますか?
  
ObjectFrame.Action プロパティ (Access)
https://docs.microsoft.com/ja-jp/office/vba/api/access.objectframe.action
  
引用:
コントロールの " Enabled /使用可能" プロパティが [No/いいえ] に設定されているか、" Locked /編集ロック" プロパティが [Yes/はい] に設定されている場合は、 Action プロパティの設定値の中に、使用不能なものがあります。 次の表に、このような条件で使用可能な設定値および使用不能な設定値を示します。

コントロールの " Enabled /使用可能" プロパティが [No/いいえ] に設定されていました。[Yes/はい]に設定することで解決しました。
 
解決@非連結オブジェクトフレームを最初に配置したときに指定したエクセルファイルから変更できない。
解決Aヘルプ通りにVBAを実行してもエラーになる。(.Action指定時)
 
Bファイルを指定するアクションを起こすまでは非連結オブジェクトフレームには何も表示したくないが、空欄にできない。
 
初期状態に対して何も表示しないようにするには、コントロールの最初の設定で何かするのかフォームを開くときに何も表示しないようなコードを作るのか、どうしたらいいでしょうか。
引用:
前回
フォームにエクセルシートのプレビュー表示の件
https://www.moug.net/faq/viewtopic.php?t=81578
  
再度
引用:
Excelへの操作は VBAで行っているのであれば、その結果を フォーム上で見せる必要があるか疑問です。
 何か問題が発生しうるから、表示し、確認してもらう必要があるのでしょうか?
   
 だとすれば、その処理自体に問題があるのですから、それを是正するのが優先と思います。

ご指摘いただいたように是正を優先させていただきますが、今回は非連結オブジェクトフレームの仕様に関する質問なのでご指導いただきたいです。
 
宜しくお願い致します。

回答
投稿日時: 22/06/27 15:41:18
投稿者: Suzu

アロハ さんの引用:
コントロールの " Enabled /使用可能" プロパティが [No/いいえ] に設定されていました。[Yes/はい]に設定することで解決しました。

 
良かったです。
 
細かい部分については、 Accessが手元に無く確認できないのですが
 
1. エラーになるとの事ですが、どんなエラーなのでしょうか。
 
 
T'sWare
【コントロールプロパティ和英対比表』
https://tsware.jp/study/vol9/vbanote_19.htm
 
に よると、365では Action が 使用できない様です。
 
2. VBE上で、コントロール名.Action の状態から、「コントロール名.」としてインテリセンス機能で
  Action は表示されますでしょうか?
 
3. 初期として、何も表示しない様にしたいとの事ですが
 非連結オブジェクトフレームを
  ・コントロールを作成する際に、リンクとしてではなく、空白の埋め込みとしておく
   或いは、
  ・コントロールを作成する際に何も表示されていない部分 が表示される位置を指定する
 
 非連結オブジェクトフレーム自体が見えない様にしてしまう
  ・非連結オブジェクトフレーム Visible の制御
  ・非連結オブジェクトフレーム の前面に別のものを表示

投稿日時: 22/06/27 20:45:21
投稿者: アロハ

Suzu様
  
コメントありがとうございます。

引用:
細かい部分については、 Accessが手元に無く確認できないのですが
  
1. エラーになるとの事ですが、どんなエラーなのでしょうか。
  
  
T'sWare
【コントロールプロパティ和英対比表』
https://tsware.jp/study/vol9/vbanote_19.htm
  
に よると、365では Action が 使用できない様です。
  
2. VBE上で、コントロール名.Action の状態から、「コントロール名.」としてインテリセンス機能で
  Action は表示されますでしょうか?

これらについては前回のコメントで書いた通り解決しております。
ちなみにインテリセンス機能でActionは表示されました。
引用:
3. 初期として、何も表示しない様にしたいとの事ですが
 非連結オブジェクトフレームを
  ・コントロールを作成する際に、リンクとしてではなく、空白の埋め込みとしておく

空白の埋め込みがないので困っています。
コントロールを配置したあと、リンクとしてではなく、空白の埋め込みに変更しようとすると「このプロパティは読み取り専用で、変更できません。」とでてきます。
引用:
 或いは、
  ・コントロールを作成する際に何も表示されていない部分 が表示される位置を指定する

この場合、パッと見何もない状態にはなりますが、クラスがペイントと指定されてしまい、ダブルクリックするとペイントが起動する状態になってしまいます。
引用:
 非連結オブジェクトフレーム自体が見えない様にしてしまう
  ・非連結オブジェクトフレーム Visible の制御
  ・非連結オブジェクトフレーム の前面に別のものを表示

最終手段として考えていましたが、このコントロールの初期設定を空にできないのであれば、これしかないのでしょうか。
 
ご指導のほど、よろしくお願いします。

回答
投稿日時: 22/06/28 17:23:34
投稿者: Suzu

すみません。
 
手元にAccessがなく、確認ができない状況なのですが
 

引用:
コントロールを配置したあと、リンクとしてではなく、空白の埋め込みに変更しようとすると「このプロパティは読み取り専用で、変更できません。」とでてきます。

こちらに関しては、
 
 
BoundObjectFrame.OLETypeAllowed プロパティ (Access)
https://docs.microsoft.com/ja-jp/office/vba/api/access.boundobjectframe.oletypeallowed
 
引用:
注意
[!メモ] 非連結オブジェクト フレームおよびグラフに対しては、オブジェクトが作成された後に " OLETypeAllowed /作成可能 OLE" の設定値を変更することはできません。

 
との事でした。
 
ですので、当方の案
引用:
 非連結オブジェクトフレームを
  ・コントロールを作成する際に、リンクとしてではなく、空白の埋め込みとしておく

こちらは、とり下げさせてください。
 
 
引用:
パッと見何もない状態にはなりますが、クラスがペイントと指定されてしまい、ダブルクリックするとペイントが起動する状態になってしまいます。

 
クラスがイベントと指定される と言うのは良く判りませんが
オブジェクトフレームなのですから、ダブルクリックをすれば、
その クラスに応じた アプリケーションが起動し、オブジェクトが表示されるのは 当然の動作と思います。
 
Action が、 Link ですから、Enable/Locked を False にも出来なさそうなので
Action を別のものにし、Enable/Locked を False にするくらいしか思いつきません。
 
他の方からの回答を待ってみてください。

投稿日時: 22/07/21 18:46:26
投稿者: アロハ

お世話になります。
 
非連結オブジェクトフレームの初期状態については、とにかくまっさらであればヨシとして適当な空のぞきファイルを表示しておくことで決着です。
 
それよりも大きな問題が発生して困っています。

引用:
OLE1.Action = acOLECreateLink

この部分で、二回に一回程の確率でaccessが突然終了します。
何が原因かわからずいろいろ調べましたが、他に同じような内容がありましたが解決には至っていないようでした。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14178339534?__ysp=44Ki44Kv44K744K5IOmdnumAo%2Be1kOOCquODluOCuOOCp%2BOCr%2BODiCDjgqjjgq%2Fjgrvjg6sg5by35Yi257WC5LqG
 
もう訳がわからないので、ここは埋め込みなど他の方法にした方がいいのでしょうか。
 
何卒ご教授の程、よろしくお願いします。

回答
投稿日時: 22/07/22 13:22:52
投稿者: Suzu

以前、同様の事象に遭遇した事があります。
 
その際には、特定のExcelファイルで起こっていました。
ですので、
・新規Excelファイルに、1シートづつコピーさせ、特定のシートに問題がある事を確認
・問題のある特定のシートから、オブジェクト(Shape、imageだったかは覚えていません)を
 削除し、新規名でファイルを保存
で回避した記憶があります。
 
 
上記回避できないのであれば、
・コメント削除
・VBAコードがファイルに存在しているなら削除
・他ファイルへの参照リンクがあるなら削除
・名前定義があるなら削除
を実施・確認してみてください。
 
特定ファイルではなく、どのファイルでも起こるのであれば、Officeの再インストール を試してみてください。
 
 
以下 愚痴 と言うか 思うこと。。
 365は、クラウドサービス。 他のアプリとの連携がどこまで問題が無いのか・・
 特に、今回の様な非連結オブジェクトフレームのリンクの場合 従来よりも不安定になりそうな。。
 試したわけでもないのですがね。。

投稿日時: 22/07/28 02:04:26
投稿者: アロハ

Suzu様
 
コメントありがあとうございます。

引用:
特定ファイルではなく、どのファイルでも起こるのであれば、Officeの再インストール を試してみてください。

念のため実施します。
 
今回の件ですが、ご指摘いただいた対策案はほぼ実施済みでした。一部実施していない内容についても試してみましたが変化はありませんでした。
で、報告ですが、いろいろ試していて一行追加することで「突然終了」が起こらなくなりました。
・・・
OLE1.SourceItem = "R1C1:R5C5"
DoEvents ←追加
OLE1.Action = acOLECreateLink
 
リンクのアクションの手前で「DoEvents」を入れてみたところ、今のところ正常に表示するようになりました。
※50回中50回成功
 
引用:
以下 愚痴 と言うか 思うこと。。
 365は、クラウドサービス。 他のアプリとの連携がどこまで問題が無いのか・・
 特に、今回の様な非連結オブジェクトフレームのリンクの場合 従来よりも不安定になりそうな。。
 試したわけでもないのですがね。。

ご指摘通り結局不安定には変わりないので、次また「突然終了」が再発したら非連結オブジェクトフレームはあきらめます。
 
ご指導ご鞭撻いただき、どうもありがとうございました。