Access (VBA) |
![]() ![]() |
(指定なし : 指定なし)
ACCESSからテキストボックスで入力した名前のWORD文書を開く
投稿日時: 22/06/18 12:35:35
投稿者: タイガー777
|
---|---|
ACCESSから、テキストボックスの入力文字でWORD文書を保存したり開きたいのですが、
|
![]() |
投稿日時: 22/06/19 09:23:53
投稿者: hatena
|
---|---|
テキストボックスの名前が「テキスト1」として、下記のコードで、
strPath = Application.CurrentProject.Path & "\" & Me.テキスト1.Value & ".docx" |
![]() |
投稿日時: 22/06/21 11:54:39
投稿者: タイガー777
|
---|---|
お世話になります
|
![]() |
投稿日時: 22/06/21 12:28:58
投稿者: hatena
|
---|---|
引用: エラーメッセージはなんですか。 またエラーが発生するコードの全体を提示してください。 またエラーが出たとき、デバッグボタンを押すとどの行がハイライト表示されるかも提示してください。 |
![]() |
投稿日時: 22/06/21 12:42:40
投稿者: タイガー777
|
---|---|
よろしくお願いします
|
![]() |
投稿日時: 22/06/21 17:52:30
投稿者: hatena
|
---|---|
Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document, SaveAsUI As Boolean, Cancel As Boolean) このコードはどこに記述してあるのですか。 Accessですか、Wordですか。 とりあえず、 「テキスト1で指定したWORDを起動できたのですが、」ということなので、 そのコード全体を提示してもらえますか。 |
![]() |
投稿日時: 22/06/22 09:19:29
投稿者: タイガー777
|
---|---|
お世話になります
|
![]() |
投稿日時: 22/06/22 14:42:20
投稿者: hatena
|
---|---|
'------------------------------------------------------------------------------ ' クラス初期化時処理 '------------------------------------------------------------------------------ Private Sub Class_Initialize() ということはこのコードはクラスモジュールということですか? なら、 Me.テキスト1.Value でエラーになりますね。だって、クラスにテキストボックスなんてないから。 これは、 Forms!フォーム名!テキスト1.Value と書き換えてください。フォーム名は、テキスト1がある実際のフォーム名にしてくださいね。 |
![]() |
投稿日時: 22/06/22 16:05:02
投稿者: sk
|
---|---|
hatena さんの引用: hatena さんの引用: せっかくクラスモジュールを使用しているのに、 特定のフォームと密結合させてしまうのは OOP の観点からすると流石にまずいのでは……。 タイガー777 さんの引用: タイガー777 さんの引用: タイガー777 さんの引用: ・Word.Application オブジェクトの DocumentBeforeSave イベントは、 あくまで「開いているいずれかの Word 文書が保存される前」に 発生するイベントである。 ・WordDoc の参照先である Word 文書を上書き保存したり、 別の名前をつけて保存したりする命令を明示的に呼び出している箇所は、 このクラスモジュール内のどこにも存在しない。 タイガー777 さんの引用: WordDoc の参照先である文書を、具体的にどのような操作や コードによって保存しようとしているのかを明らかにするのが 先決でしょう。 現時点では DocumentBeforeSave イベントで実行すべき処理だとは 思えません。 |
![]() |
投稿日時: 22/06/23 00:43:24
投稿者: hatena
|
---|---|
sk さんの引用: おっしゃる通りだと思います。 ただ、ここまでのやりとりから、はたしてこのコードを質問者さん自身が書いたものなのか、OOPについて理解できるスキルがあるのか、甚だ疑問だったので、手っ取り早い解決法を提案しました。 あとは、skさんにおまかせします。 |
![]() |
投稿日時: 22/06/23 11:04:12
投稿者: sk
|
---|---|
hatena さんの引用: 恐らく、以下のブログエントリーで紹介されている クラスモジュールをそのまま流用しているだけではないかと。 VB.NET-TIPS などプログラミングについて: https://vbnettips.blog.shinobi.jp/vba/access%20vba%20%E3%81%A7word%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%BF%9D%E5%AD%98 https://vbnettips.blog.shinobi.jp/vba/access%20vba%20%E3%81%A7%E3%81%AEword%E5%87%A6%E7%90%86%E7%94%A8%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90 https://vbnettips.blog.shinobi.jp/vba/access%20vba%20%E3%81%A7%E3%81%AEword%E6%96%87%E6%9B%B8%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E6%A4%9C%E7%B4%A2%E3%81%A8 タイガー777 さんの引用: 1. Word アプリケーションを起動する。 2. 何らかの Word 文書(どこに保存されているのかは不明)を開く。 3. 開いた文書に対して何らかの変更(変更内容の詳細は不明)を加える。 4. 編集した文書に任意の名前(ここでは Access のフォーム上の テキストボックスに入力されたファイル名)をつけて保存する。 5. 保存した文書を閉じる。 6. Word アプリケーションを終了する。 という一連の処理をノンストップで実行したいのであれば、 Word アプリケーションの特定のイベントと連動させる 必要はありません。 手順 4 に関しては、保存したい Word.Document オブジェクトの SaveAs2 メソッドを呼び出せば済むことですし、それを clsWord クラスの 機能として実装したいなら、保存先ファイルパスを引数として受け取って WordDoc の SaveAs2 メソッドを実行するプロシージャを追加なされば よろしいでしょう。 |
![]() |
投稿日時: 22/06/23 12:01:38
投稿者: タイガー777
|
---|---|
DocumentBeforeSaveを削除することで保存が可能となりました。
|