【问题标题】:Why am I getting an nonexistent file name?为什么我得到一个不存在的文件名?
【发布时间】:2016-06-01 03:50:40
【问题描述】:

我正在尝试运行一个代码,该代码将对文件夹中的所有 excel 文件进行一些替换。首先,这里是代码:

Dim FileSystem As Object
Dim HostFolder As String
Dim StringA As String
Dim StringB As String

Sub Init()
    Application.DisplayAlerts = False

    HostFolder = "\\Pc-dell\d\Documentos\LSM2\CLIENTES\SRB CDT 2 PROGRESSO2\"

    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(HostFolder)

    Application.DisplayAlerts = True
End Sub

Sub DoFolder(Folder)
    Dim SubFolder

    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next

    Dim File

    For Each File In Folder.Files

        If Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx" Then

            With Workbooks.Open(File, False)


                Dim ws As Worksheet
                For Each ws In ActiveWorkbook.Worksheets

                    SwapStringsInActiveWorkbook "l1", "l2", ws
                    SwapStringsInActiveWorkbook "L1", "L2", ws
                    SwapStringsInActiveWorkbook "l 1", "l 2", ws
                    SwapStringsInActiveWorkbook "L 1", "L 2", ws
                    SwapStringsInActiveWorkbook "loja1", "loja2", ws
                    SwapStringsInActiveWorkbook "LOJA1", "LOJA2", ws
                    SwapStringsInActiveWorkbook "loja 1", "loja 2", ws
                    SwapStringsInActiveWorkbook "LOJA 1", "LOJA 2", ws
                    SwapStringsInActiveWorkbook "Loja1", "Loja2", ws
                    SwapStringsInActiveWorkbook "Loja 1", "Loja 2", ws
                    SwapStringsInActiveWorkbook "LOJA1", "LOJA2", ws
                    SwapStringsInActiveWorkbook "LOJA 1", "LOJA 2", ws

                Next ws

            End With

            ActiveWorkbook.Save
            ActiveWorkbook.Close

        End If
Continue:
    Next
End Sub

Sub SwapStringsInActiveWorkbook(StringA As String, StringB As String, ws As Worksheet)

    On Error Resume Next
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:=StringA, Replacement:="_AUXTEMPREPL_", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False

    On Error Resume Next
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:=StringB, Replacement:=StringA, LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False

    On Error Resume Next
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:="_AUXTEMPREPL_", Replacement:=StringB, LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False

    On Error GoTo 0
End Sub

但是在某些时候,经过一些替换,它给了我一个错误,说它无法打开文件:

“Excel 无法打开文件 '~$PLAN COMPARAT de CUSTOS Rancho Bom Loja2-2015.xlsx',因为文件格式或文件扩展名无效。请检查文件是否未损坏以及扩展名是否匹配文件格式。” (这是葡萄牙语错误消息的翻译,抱歉我无法更改语言)

事实是我在这个文件夹上进行了搜索,并没有这样的文件。不过,有一个名为“PLAN COMPARAT de CUSTOS RB-L2-2015.xlsx”的文件,它是一个缩写。也许它试图打开的文件是不再存在的旧文件?

我之前也有一个脚本可以在 word 文件中进行替换,它还会尝试打开一些不存在的文件,或者它会尝试打开一个名为“~$”的文件加上文件名存在的。这个“~$”是从哪里来的?

我需要一些线索。

【问题讨论】:

  • 什么是“.xlsl”?我希望“.xlsx”/“.xlsxm”/“.xls”。
  • .xlsl 是文件的锁定版本。当 Excel 在某个时候崩溃并且它隐藏在驱动器中时,很可能该文件已保存。如果您选择在 Internet Explorer 中显示隐藏文件的选项,您将看到它。你可以做一个我相信的检查来测试隐藏的文件(或者至少检查文件名中的~$.xlsl,如果有的话,跳过它(或者甚至删除它)。
  • @Grade'Eh'Bacon - 查看我对.xlsl的评论
  • 很抱歉,.xlsl 是我的错字。我的意思确实是“xslx”。
  • 我仍然认为您的问题是当您循环浏览文件夹中的所有文件时发现隐藏的临时文件。就个人而言,我不认为这是一个编码问题。

标签: excel vba replace filenames


【解决方案1】:

我只是建议您在找到/删除恶意文件之前这样做。替换:

If Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx" Then

与:

If Left(File.Name, 2) <> "~$" And (Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx") Then

这应该只是一种临时解决方法。

【讨论】:

  • 好的。谢谢你。我测试了它,它现在正在工作。我不明白为什么这是一个临时的解决方法。
  • @FelipeMüller 虽然变通方法可以解决您的问题,但使用它会隐藏潜在问题............如果你不关心垃圾的存在文件然后继续使用它......如果你想删除垃圾,很容易编写一个新的子来定位所有子文件夹中的所有垃圾。
  • 哦,好吧,我实际上并不知道它们是垃圾文件。我认为他们需要一些东西。
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 2018-04-19
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多