2

「BigList.xlsx」というラベルの付いた Excel ファイルにすべての生徒とその情報のリストを保持するプロジェクトがあります。次に、VLOOKUP.

たとえば、補助ファイルのセル A1 には、次のような数式が表示される場合があります。

=Vlookup(B3, 
    'c:\documents and settings\user\desktop\[BigList.xlsx]Sheet1'!$a$1:$b$10000,
    2,false).

上記の vlookup リンクは BigList.xlsx を参照しています。ただし、そのファイル名を MasterDatabase.xlsm などの別の名前に変更する必要があることに気付きました (拡張子が異なることに注意してください)。手動で 40 ~ 50 個のファイルすべてを調べて、検索と置換を行わずにこれを行う簡単な方法はありますか?

基本的な考え方は、ハードコードされたリンクを動的リンクに変更して、BigList.xlsx のファイル名をいつでも変更できるようにすることであり、リンクを更新するために 40 ~ 50 個のすべてのファイルに戻る必要はありません。

4

3 に答える 3

4

これはあなたが必要とすることをするはずです-多分超高速ではないかもしれませんが、50のワークブックで一度だけそれをする必要があるならそれは十分に良いはずです。置換行は、ワークブックのすべてのシートで置換を行う必要があることに注意してください。

Option Explicit

Public Sub replaceLinks()

    Dim path As String
    Dim file As String
    Dim w As Workbook
    Dim s As Worksheet

    On Error GoTo error_handler

    path = "C:\Users\xxxxxx\Documents\Test\"
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    file = Dir$(path & "*.xlsx", vbNormal)
    Do Until LenB(file) = 0
        Set w = Workbooks.Open(path & file)
        ActiveSheet.Cells.Replace What:="'THE_LINK_YOU_WANT_TO_CHANGE'!", _
                Replacement:="'THE_NEW_LINK'!", LookAt:=xlPart
        w.Save
        w.Close
        file = Dir$
    Loop

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    Exit Sub

error_handler:
    MsgBox Err.Description
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub
于 2012-03-19T18:01:33.937 に答える
3

コードを使用せずに Excel 2010 でこれを行うことができます。(メモリが機能する場合は、以前のバージョンの Excel でも機能します。)

  1. 50 個の補助的な Excel ファイルをすべて Excel で同時に開きます。
  2. BigList.xlsx を開きます。(現在、51 個のファイルが Excel で開かれています。)
  3. File-をクリックしSave Asて、BigList を MasterDatabase.xlsm として保存します。
  4. 新しい MasterDatabase.xlsm ファイルを閉じます。
  5. 補助ファイルの 1 つを見て、Excel が新しいファイルを指していることを確認します。
  6. すべてのファイルを閉じて保存します。
于 2012-03-19T22:57:08.073 に答える
2

このコードは、リンクの変更を直接自動化します

  1. BigList.xlsxコードへのパスとMasterDatabase.xlsmコード内のパスを更新します
  2. パスを 40 ~ 50 個のファイルに更新します (c:\temp\" を使用しました)。
  3. 次に、コードはこれらのファイルの両方を開き (再リンクを高速化するため)、次に でファイルを 1 つずつ開き、strFilePathリンクを WB1 (strOldMasterFile ) から Wb2 (strOldMasterFile ) に変更し、保存したファイルを閉じます。

コードがこれらのファイルを開くため、コードの開始時にこれらのファイルがすべて閉じられていると想定していることに注意してください。

    Sub ChangeLinks()
        Dim strFilePath As String
        Dim strFileName As String
        Dim strOldMasterFile As String
        Dim strNewMasterFile As String

        Dim WB1 As Workbook
        Dim WB2 As Workbook
        Dim WB3 As Workbook

        Dim lngCalc As Long    

        strOldMasterFile = "c:\testFolder\bigList.xlsx"
        strNewMasterFile = "c:\testFolder\newFile.xlsm"

        On Error Resume Next
        Set WB1 = Workbooks.Open(strOldMasterFile)
        Set WB2 = Workbooks.Open(strNewMasterFile)
        If WB1 Is Nothing Or WB2 Is Nothing Then
            MsgBox "One (or both) of " & vbnerwline & strOldMasterFile & vbNewLine & strNewMasterFile & vbNewLine & "cannot be found"
            WB1.Close False
            WB2.Close False
            Exit Sub
        End If
        On Error GoTo 0

        With Application
            .DisplayAlerts = False
            .ScreenUpdating = False
            .EnableEvents = False
            lngCalc = .Calculation
            .Calculation = xlCalculationManual 
        End With

        strFilePath = "c:\temp\"
        strFileName = Dir(strFilePath & "*.xls*")

        'Error handling as link may not exist in all files
        On Error Resume Next
        Do While Len(strFileName) > 0
            Set WB2 = Workbooks.Open(strFilePath & strFileName, False)
            WB2.ChangeLink strOldMasterFile, strNewMasterFile, xlExcelLinks
            WB2.Save
            WB2.Close False
            strFileName = Dir
        Loop
        On Error GoTo 0

        WB1.Close False
        WB2.Close False

        With Application
            .DisplayAlerts = True
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = lngCalc
        End With

        End Sub
于 2012-03-20T01:34:34.030 に答える