Word ドキュメントで変更された変更日をチェックする Excel プロジェクトがあり、変更されている場合はそのドキュメントを開き、Word フォーム フィールドからテキストを Excel にインポートします。
Word 文書を開いてインポートする Excel のルーチンは次のとおりです。
Sub CopyFromWord(pFile as String,aFile as string)
Dim wdApp As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wdApp = CreateObject("Word.Application")
Else 'word is already running
End If
On Error Goto 0
Set wdDoc = wdApp.Documents.Open(Filename:="" & pFile & "", ReadOnly:=True)
wdApp.Visible = False
For Each c In wdDoc.bookmarks
'removed code that copies values from word doc fields to excel sheet
Next c
wdApp.Activedocument.Close SaveChanges:=False
End Sub
Word 文書はすべて、同じファイルのコピーとして開始されました。ファイルのコピーは数千ありますが、それぞれが一意の名前を持つ独自のフォルダーに配置されています。
ユーザーは、必要なフォルダーを見つけて、そのフォルダー内の Word ドキュメントを開きます。ユーザーフォームを表示し、ドキュメントのフォームフィールドにユーザーフォームへの入力を入力します。コマンド ボタンは、フォームを保存して終了します。
ドキュメントを開くとウェルカム メッセージ/ユーザー フォームが自動的に読み込まれるため、次のコードをドキュメントの open イベントに追加しました。
Sub Document_Open()
If ThisDocument.ReadOnly = True then Exit Sub
msgbox "Welcome " & Environ$("Username") & ". Click OK to begin."
Userform1.show
End sub
これにより、Excel プロジェクトがすべてのファイルをループするときに、ファイルが変更されていることがわかった場合は、ファイルを開く (読み取り専用) 必要があるため、ユーザーフォーム/ウェルカム メッセージで中断されることなくデータをインポートし、閉じて、実行できます。変更された変更日をチェックするすべてのファイルをループして検索します。
常に実行する必要がありますが、約 20% の確率で、ドキュメントは Excel コードによってのみ読み取られますが、Word ドキュメントのウェルカム メッセージ ボックスが表示され、thisdocument.readonly が誤って false を返したことを示します。このシナリオでワード文書をデバッグし、
? thisdocument.readonly
「偽」の結果が得られます。ただし、Word 文書のタイトル バーも " (読み取り専用)" で終わっているため、明らかに読み取り専用で開かれているため、readonly は True を返す必要があります。
ドキュメントに固有のものではありません。それらを開こうとすると、次回は機能するようです(読み取り専用を正しく登録し、メッセージボックスコードの前にサブを終了するという点で)。どんな種類のパターンも見つけることができず、オンラインで情報を見つけることができません。これを何週間も探していました!