[[20250428092431]] 『Excelデータの自動リンク更新』(Maid) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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


それで何か不具合でもあるのですか。
質問内容を明確にしましょう。
(?) 2025/04/28(月) 13:52:15

 > ワークブックのリンクが必要か確認:必要な場合はtrueが返ってくる
 > Workbooks.IsDirty
 これの出典を書いてもらえますか?

(xyz) 2025/04/28(月) 15:15:55


説明が悪く申し訳ございません。

以下の2か所が作れません。

ここの箇所

                       'ワークブックに更新が必要か確認するここから
                            '更新が必要な場合はchkcnt=1
                        'ワークブックに更新が必要か確認するここまで

ここの箇所

                            'ワークブックのリンク更新ここから
                            'ワークブックのリンク更新ここまで

ご教授いただければと思います。
(Maid) 2025/04/28(月) 16:41:48


xyzさんの質問にちゃんと答えましょうね。

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


自動リンクの意味が分からないけど
数式なら再計算で更新されないですかね?
(自動再計算) 2025/04/29(火) 03:27: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


xyz様
質問にもお答えできず申し訳ございません。
無能なのでうまくお伝えすることもできず。

そんな中理解いただきうれしく思います。

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.