Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Home : Excel 2019)
ExcelVBAでのWord文書読込について
投稿日時: 24/05/27 17:28:56
投稿者: myubu

Windows 10のパソコン上で
Excel 2019にVBAを組みWord文書からテキストを読み込み
1.環境文字の変換 ㈪ →(月)、☎ → 電話
2.特定文字列の先頭に※マークを追加
3.文字列間の空白を除去(Trim)
等をおこなっていました。
 
今回Windows11のパソコンで作業することになり
同じExcelファイル、Word文書で上記VBAを走らせたところ
下記の表示が出てVBAが止まってしまいました。
 
ワード.docは編集のためにロックされています
次のいずれか選択してください。
 ◎読み取り専用として開く
 ◯コピーを作成し変更内容を後で元のファイルに反映する
 ◯ほかの人がファイルの使用を終了したときに通知を受け取る
 
◎読み取り専用として開く をクリックするとVBAが走り
その後の変換等も問題なく終わるのですが・・・
 
もちろんWord文書を開いたりはしていませんし
ExcelファイルもWord文書も同じデスクトップ上にあります。
Windows 10の時は同じ条件で何の問題もなくVBAが走っていました。
 
Windows 11ではWord文書の読み込みに関して何か変更があるのでしょうか。
以上、よろしくお願いいたします。

回答
投稿日時: 24/05/27 17:38:38
投稿者: sk

実際にプロシージャに記述されているコード全体を
具体的に明記されることをお奨めします。

投稿日時: 24/05/27 18:36:54
投稿者: myubu

skさん コメントいただきありがとうございます。
 
ちなみにVBAは下記の通りです。
 Sub word_open()
 Sheet1.Cells.Clear 'データを削除
 Dim fullpath As String '変数型定義
 Set wd = CreateObject("Word.Application") 'ワードを開く
 fullpath = "C:\Users\pc\Desktop\ワード.doc" '"ワード.doc"のフルパス+"ワード.doc"を設定
 Set wddoc = wd.Documents.Open(fullpath) 'ワードファイルを開いて内容を変数に格納
 wddoc.Range.Copy 'ワード文書内容をコピー
 Sheet1.Range("A1").Select 'sheet1のセルA1を選択
 ActiveSheet.Paste 'アクティブシートにペースト
 
 この後、Excel内で各種変換等を行っています。
 
よろしくお願いいたします。

回答
投稿日時: 24/05/27 21:25:11
投稿者: simple

現在のコードでは、
・開いたdocを閉じること
・生成したWordアプリケーションの終了
は確実にされていますか?
エラー発生を切っ掛けに残っていると、そうしたエラー表示がされることはありそうですね。
そうしたエラーが出たときに、タスクマネージャーでWordアプリが動作していないか確認すると
よいでしょう。
 
そうしたことをコードで避けようとすれば、
GetObjectでWordアプリケーションの存在を確認し、
・存在すれば、開いているdocumentを閉じるようにします。
・無いときに限定して、CreateObjectすることが考えられます。

投稿日時: 24/05/27 22:16:00
投稿者: myubu

simplさん コメントいただきありがとうございます。
  
先程のVBAはExcelのアクティブシートにペーストするまでを記載していましたが
実際はペーストした直後に下記のようにワードを閉じています。
 
 Sub word_open()
 Sheet1.Cells.Clear 'データを削除
 Dim fullpath As String '変数型定義
 Set wd = CreateObject("Word.Application") 'ワードを開く
 fullpath = "C:\Users\pc\Desktop\ワード.doc" '"ワード.doc"のフルパス+"ワード.doc"を設定
 Set wddoc = wd.Documents.Open(fullpath) 'ワードファイルを開いて内容を変数に格納
 wddoc.Range.Copy 'ワード文書内容をコピー
 Sheet1.Range("A1").Select 'sheet1のセルA1を選択
 ActiveSheet.Paste 'アクティブシートにペースト
 
 wd.Quit 'ワードを閉じる
 
 この後、Excel内で各種変換等を実施。
  
実はWindows11のパソコンは別の場所にあるためすぐに確認ができません。
明日にでもテストしてみたいと思います。
ありがとうございました。

回答
投稿日時: 24/05/27 22:19:14
投稿者: WinArrow

現コードで、エラー発生時には、Wordインスタンスが見えないと思います。
  
>Set wd = CreateObject("Word.Application")
の次に
wd.Visible = True
を挿入すると、
エラー発生時にも、Wordインスタンスが目視できます。
  
word文書には、幾つかの制御文字が存在します。
文書全体をそっくり複写すると、その制御文字が影響してエラーになることがあり得ます。
普通、目視で空白に見えてるのは、スペースという概念ですが、制御文字の可能性もあります。
mた、TRIMは曲者です。制御文字も影響します。
VBAのTRIMとワークシート関数のTRIMは機能が違います。
 
念ンため申し添えておきます。

回答
投稿日時: 24/05/27 22:32:36
投稿者: WinArrow

行き違いになってしまったようです。
  
Wordのインスタンスを解放したのですが、
その前に、
WdDoc.Close False
を念のため追加してみてください。
 

投稿日時: 24/05/28 08:10:45
投稿者: myubu

WinArrowさん コメントいただきありがとうございます。
 
>目視で空白に見えてるのは、スペースという概念ですが、制御文字の可能性もあります。
制御文字については全然考えていませんでしたので確認してみます。
 
>VBAのTRIMとワークシート関数のTRIMは機能が違います。
はい、TRIM と書いていましたが実際は色々試しましたてうまくいかず
結局 TRIM は使わず別の方法で解決しました。
分かりやすく書いたつもりでしたが申し訳ありません。
 
>WdDoc.Close False を念のため追加してみてください。
試してみます。
 
 
※皆さんに色々とコメントいただきましたが
VBAコードに問題があるのも確かで、ご指摘も勉強になるのですが
問題は
 Windows10 のパソコンでは問題なく動作していたものが
 Windows11 のパソコンではエラーになる
というのがわからないのですが・・・
 
よろしくお願いいたします。

回答
投稿日時: 24/05/28 09:30:48
投稿者: WinArrow

こちらの環境は Windows10 & MSOffice 2019 です
Windows11ではないので
Windows10との違いはテストできませんが、
こちらの環境では
wddoc.Close False
が無くても、問題は発生しません。
 

回答
投稿日時: 24/05/28 09:37:21
投稿者: WinArrow

気になったところ
window10のPCとWindows11のPCはおなじPCではないですよね?
そうすると

> fullpath = "C:\Users\pc\Desktop\ワード.doc"
は、大丈夫かな?

回答
投稿日時: 24/05/28 11:29:56
投稿者: Suzu

Windows10 → Windows10 との事ですが
 
VBA だけが問題ではなく 別の部分との 兼ね合いで問題がある可能性があります。
 
例えば、
・デスクトップ上では、アイコンビューではなく サムネイルビューを使っている
・開く際、エクスプローラーから開くが、プレビューウィンドを表示してある
上記の状態で、VBA から ファイルを開こうとする場合。
 
 そちらで使っている判定になり読み取り専用になる。
 (普通にエクスプローラーやデスクトップからダブルクリックの場合
  Windowsが、プレビューを解除してから 開く動作になるが
  VBA等、別経由で開こうとした場合、プレビューは解除されない為
  プレビューで使われているので、読み取り/通知 のダイアログが表示される)
 
その外にも考えうる要因はあります。
 
詳しくは
 
Windows 10/11の「ファイルの使用中」エラーの対処法
https://jp.minitool.com/data-recovery/fix-file-in-use-error-windows-10-11.html
 
が参考になります。

回答
投稿日時: 24/05/28 21:37:43
投稿者: WinArrow

suzuさんのレスの
>・デスクトップ上では、アイコンビューではなく サムネイルビューを使っている
ではないかと推測します。
 
こちらの環境は、Windows10 Proです。
コントロールパネルで確認したんですが、よく分かりません。
おそらくアイコンビューだと思います。
 
Windows11は、デフォオルトがサムネイルビューになっているものと思います。
 
その前に
wd.Documents.OpenでReadOnly:=Trueを指定して、試してみることはできませんか?

回答
投稿日時: 24/05/29 08:13:15
投稿者: WinArrow

【業務連絡】
デスクトップに縮小(サムネイル)のword文書を作成し、
掲示のコードを実行しましたが、エラーにはなりませんでした。
 
デスクトップのアイコンは、通常のwordアイコンとは異なります。

トピックに返信