【发布时间】: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