首页 > 解决方案 > 在 Excel VBA 中查找和替换文件路径

问题描述

我目前正在处理一个必须定期用新数据更新的 Excel 文件。

数据源是一个 CSV 文件。

使用 VBA,我打开 CSV 文件,将数据转换为命名表。Excel 包含需要用新路径替换的先前数据源路径。

为了使任务更容易,我将先前的数据源路径放在“ACTUALISATION”表中的单元格 C11 中,因此我只需在那里获取旧数据源并在每个其他工作表中用新数据源替换旧数据源。

我遇到的问题是旧数据源没有在每个地方都正确替换,这很奇怪,因为替换参数与使用 CTRL+H 的手动查找和替换方法相同。

知道为什么/如何发生这种情况吗?

Sub ActualiserTout()   
    Dim exportGalaxy As String
    Dim tbl As ListObject
    Dim rng As Range
    Dim reportingWS(1 To 5) As String
    Dim aRemplacer As String
    Dim remplacement As String

    exportGalaxy = v360FilePath()

    reportingWS(1) = "Graphs Fenêtre Eval"
    reportingWS(2) = "Graphs V360 FO - EPICs"
    reportingWS(3) = "Graphs V360 BO - EPICs"
    reportingWS(4) = "Graphs V360 FO - Evolution"
    reportingWS(5) = "Graphs V360 BO - Evolution"

    aRemplacer = Worksheets("ACTUALISATION").Cells(11, 3).Value
    remplacement = Chr(39) & exportGalaxy & Chr(39) & "!"

    If exportGalaxy = "" Then
        Exit Sub
    End If

    Workbooks.Open exportGalaxy, Delimiter:=4, Local:=True

    Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
    Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
    tbl.Name = "DonnéesBrutes"

    Workbooks("DATA_V360-1.xlsm").Activate

    For Each ws In reportingWS
        Worksheets(ws).Cells.Replace _
        What:=aRemplacer, _
        Replacement:=remplacement, _
        LookAt:=xlPart, _
        SearchOrder:=xlByRows, _
        MatchCase:=False, _
        SearchFormat:=False, _
        ReplaceFormat:=False
    Next

    Worksheets("ACTUALISATION").Cells(11, 3).Value = Chr(39) & remplacement
End Sub

Function v360FilePath()
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Add "CSV Files", "*.csv", 1

        If .Show = True Then
            'Récupère le chemin, nom et extension du fichier sélectionné
            v360FilePath = .SelectedItems.Item(1)
        Else
            MsgBox "no file selected"
        End If

    End With
End Function

谢谢你的帮助!

编辑:我尝试替换来自的Export(4).csv数据Export(3).csv

在第一个工作表中,路径/文件名/扩展名在任何地方都被正确替换

=NB.SI.ENS('C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[ReponseQ1]; "=2"; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[debutCas]; ">="&[@[Date Semaine]]; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[debutCas]; "<"&[@[Date Semaine]]+7)

在“EPICs”工作表中,只有第一个表的前 2 个单元格被正确替换,而在“Evolution”工作表中,没有一个被替换。

这是在前两个单元格之一中:

=NB.SI.ENS('C:\Users\E15378\Downloads\Export(3).csv'!DonnéesBrutes[clickFacturation];">0"; 'C:\Users\E15378\Downloads\Export(3).csv'!DonnéesBrutes[formatVision360]; "pop-up"; 'C:\Users\E15378\Downloads\Export(3).csv'!DonnéesBrutes[fluxBandeau]; ">7,49912E+11")*100/B9

在第二个单元格之后,其余的都没有被替换:

=SOMME.SI.ENS('C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[Temps affichage EPIC Facturation]; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[formatVision360]; "pop-up"; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[fluxBandeau]; ">7,49912E+11")/NB.SI.ENS('C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[Temps affichage EPIC Facturation]; ">0"; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[formatVision360]; "pop-up"; 'C:\Users\E15378\Downloads\Export(4).csv'!DonnéesBrutes[fluxBandeau]; ">7,49912E+11")

标签: excelvbacsv

解决方案


推荐阅读