『Excelデータの自動リンク更新』(Maid)
複数のExcelデータを一括で自動リンク更新をさせたいです。
以下の使用で可能でしょうか?
ワークブックのリンクが必要か確認:必要な場合はtrueが返ってくる
Workbooks.IsDirty
ワークブック全体のリンク更新する
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
別で作成したものにこれらを組み込めるのか?
chkcnt = 0 ' 対象ファイルを操作 tws.Cells(R, 1) = stkFile.Name tws.Cells(R, 2) = stkFile.DateLastModified tws.Cells(R, 3) = stkFile.Path ' 対象ブックを開く Workbooks.Open stkFile.Path ''' 対象のワークブックを開く
'開いたワークブックを編集する '開いたワークブックを編集する '開いたワークブックを編集する ''' 対象ブックの内容を更新するための関数を呼び出し(データ置き換え用) '''Call bookUpdate(Workbooks(stkFile.Name), chkcnt)
' 対象ブックのハイパーリンクを更新するための関数を呼び出し Call SheetHPLUpdate(Workbooks(stkFile.Name), chkcnt)
'ワークブックに更新が必要か確認するここから '更新が必要な場合はchkcnt=1 'ワークブックに更新が必要か確認するここまで
If chkcnt > 0 Then 'ワークブックのリンク更新ここから 'ワークブックのリンク更新ここまで tws.Cells(R, 1).Interior.Color = RGB(255, 255, 0) tws.Cells(R, 2).Interior.Color = RGB(255, 255, 0) tws.Cells(R, 3).Interior.Color = RGB(255, 255, 0) ' 対象ブックを閉じる(保存する) 'Workbooks(stkFile.Name).Worksheets(1).Activate Worksheets(1).Activate MsgBox (stkFile.Name) Workbooks(stkFile.Name).Save Workbooks(stkFile.Name).Close SaveChanges:=True Else ' 対象ブックを閉じる(保存しない) Workbooks(stkFile.Name).Close SaveChanges:=False End If
1からでも構いません。
ご教授いただければと思います。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
途中になっていました。
再送させていただきます。
Sub nowDirFileListView()
Dim FSO As FileSystemObject Dim tws As Worksheet Dim R As Long: R = 3 Dim nowFolder As Folder Dim stkFile As File Dim nowPGPath As String Dim nowWBN As String Dim chkcnt As Long
Set tws = Worksheets("ファイル一覧取得テスト用") nowPGPath = ThisWorkbook.Path nowWBN = ThisWorkbook.Name 'MsgBox ("プログラムがある場所:" & nowPGPath) 'MsgBox ("プログラム名:" & nowWBN) Set FSO = CreateObject("Scripting.FileSystemObject") Set nowFolder = FSO.GetFolder(nowPGPath)
For Each stkFile In nowFolder.Files If stkFile.Name = nowWBN Then 'MsgBox ("プログラム本体は対象外です。ファイル名[ " & stkFile.Name & " ]")
Else If FSO.GetExtensionName(stkFile.Path) Like "xls*" Then 'MsgBox ("エクセルファイルが対象です。")
If stkFile.Name Like "~*" Then 'MsgBox ("作業中ファイル(一時保存ファイル)は対象外です。ファイル名[ " & stkFile.Name & " ]")
Else If opendWB(stkFile.Name) Then 'MsgBox ("作業中ファイル(本体)は対象外です。ファイル名[ " & stkFile.Name & " ]")
Else chkcnt = 0 ' 対象ファイルを操作 tws.Cells(R, 1) = stkFile.Name tws.Cells(R, 2) = stkFile.DateLastModified tws.Cells(R, 3) = stkFile.Path ' 対象ブックを開く Workbooks.Open stkFile.Path ''' 対象のワークブックを開く
'開いたワークブックを編集する '開いたワークブックを編集する '開いたワークブックを編集する ''' 対象ブックの内容を更新するための関数を呼び出し(データ置き換え用) '''Call bookUpdate(Workbooks(stkFile.Name), chkcnt)
' 対象ブックのハイパーリンクを更新するための関数を呼び出し Call SheetHPLUpdate(Workbooks(stkFile.Name), chkcnt)
'ワークブックに更新が必要か確認するここから '更新が必要な場合はchkcnt=1 'ワークブックに更新が必要か確認するここまで
If chkcnt > 0 Then 'ワークブックのリンク更新ここから 'ワークブックのリンク更新ここまで tws.Cells(R, 1).Interior.Color = RGB(255, 255, 0) tws.Cells(R, 2).Interior.Color = RGB(255, 255, 0) tws.Cells(R, 3).Interior.Color = RGB(255, 255, 0) ' 対象ブックを閉じる(保存する) 'Workbooks(stkFile.Name).Worksheets(1).Activate Worksheets(1).Activate MsgBox (stkFile.Name) Workbooks(stkFile.Name).Save Workbooks(stkFile.Name).Close SaveChanges:=True Else ' 対象ブックを閉じる(保存しない) Workbooks(stkFile.Name).Close SaveChanges:=False End If '開いたワークブックを編集する '開いたワークブックを編集する '開いたワークブックを編集する
R = R + 1
End If
End If
End If
End If
Next
End Sub
(Maid) 2025/04/28(月) 13:43:00
> ワークブックのリンクが必要か確認:必要な場合はtrueが返ってくる > Workbooks.IsDirty これの出典を書いてもらえますか?
(xyz) 2025/04/28(月) 15:15:55
以下の2か所が作れません。
ここの箇所
'ワークブックに更新が必要か確認するここから '更新が必要な場合はchkcnt=1 'ワークブックに更新が必要か確認するここまで
ここの箇所
'ワークブックのリンク更新ここから 'ワークブックのリンク更新ここまで
ご教授いただければと思います。
(Maid) 2025/04/28(月) 16:41:48
https://learn.microsoft.com/ja-jp/javascript/api/excel/excel.workbook?view=excel-js-preview
(OK) 2025/04/28(月) 16:50:09
マクロに慣れておらず、用語等々をあまり理解できず勉強中でございます。
皆様には大変ご迷惑をおかけしたします。
質問に不備が多々あるかと思いますが、ご指摘いただければ幸いです。
こちらの意図がうまく通じず説明不足ですみません。
(Maid) 2025/04/28(月) 17:26:33
自動リンクの意味が分からないけど エクセルを開いた際にダイヤログボックスが表示され、リンク先のファイルが更新されている場合、更新するor更新しないが表示されます。
1フォルダに複数データのExcelが入っており、
?@ファイルを開く
?Aダイヤログボックスが表示されない→保存しない
?Bダイヤログボックスが表示されたら更新→保存
?@〜?Bを繰り返して1フォフダ内のすべてのExcelをチェックしたいです。
(Maid) 2025/04/29(火) 08:26:22
(?) 2025/04/29(火) 08:54:52
(1) 最初の質問はこうでした。 > 以下の使用で可能でしょうか? > ワークブックのリンクが必要か確認:必要な場合はtrueが返ってくる > Workbooks.IsDirty
その出典が質問者さんから説明がありませんので不明です。 あなたが思いつくことであるはずもなく、なんらかの外部の情報を使っているはずです。
質問の肝心な部分なんですから、そうしたことをきちんと書いて下さい。 (たぶん、(OK)さんの発言からすると、使えないと思います。 VBAとは異なるものに関するものでしょう。)
(2) 起動時のメッセージ関係については、下記を参照してください。
Excel でのリンクされたブックの更新に関する起動時メッセージの制御方法 https://learn.microsoft.com/ja-jp/office/troubleshoot/excel/control-startup-message
(3) UpdateLinksプロパティを3にして openすれば、 上記に拘わらず、自動的に更新させることができます。
Workbooks.Open メソッド (Excel) https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open
(xyz) 2025/04/29(火) 10:09:22
ダイヤログボックス
→このブックには、安全ではない可能性のある外部ソースへのリンクが1つ以上含まれています。
リンクを信頼できる場合、リンクを更新して最新データを取り込みます。信頼できない場合は、データをそのまま手元で処理してかまいません。
選択 → 更新する 更新しない
上記の内容が表示される場合とされない場合があります。
表示された場合は、更新する としてファイル保存 です。
(Maid) 2025/04/29(火) 11:34:26
そんな中理解いただきうれしく思います。
Excelの設定で相対パスの設定も調べましたが、
他ファイルでリンクが多々あるものがあり、更新に時間がかかり落ちてしまうので、使用しませんでした。
Workbooks.Open メソッド (Excel)を参考にさせていただき、 1から作成してみようと思います。
ありがとうございました。
(Maid) 2025/04/29(火) 12:59:26
「更新が必要かどうかを判定する意味」がずっとわかりませんでした。 ・問答無用でリンク更新する処理では、何か支障があるのですか? ・データ更新の必要性を調べる意義は何ですか? ・一律に更新した結果、今と変わらなかったとしても何も支障はないはずですが。 そこが理解に苦しむところでした。
> Excelの設定で相対パスの設定も調べましたが、 > 他ファイルでリンクが多々あるものがあり、更新に時間がかかり落ちてしまうので、使用しませんでした。 問題はそこだったのですか?最初からそのような情報を書いたほうがいいですね。
そういうブックは限られるでしょうから、詳細を個別に調べるとよいでしょう。 更新せずに開いたあとで、ActiveWorkbook.LinkSourcesでリンク先のパス情報がわかるので、 それが実際に存在するかどうかをDir関数で調べるなどと言う方法も 更新に時間を要する原因調査の一環にはなるでしょう。
その他の気づき。 Workbooks.Open stkFile.Path ''' 対象のワークブックを開く に関してですが Set wb = Workbooks.Open(stkFile.Path) とすれば、それ以降でWorkbooks(stkFile.Name)と何度も書かなくても、 単にwbで済みます。コードが見やすくなるはずです。 (xyz) 2025/04/29(火) 16:19:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.