..................................................... ..................................................... ..................................................... ......
最新消息...... PPS我刚读到 的比只是.. 这就是我要尝试的。但我真的很想知道如何在循环中使用,意思是“如何关闭在循环中使用的文件?” 要清楚大局,请继续阅读。
..................................................... ..................................................... ..................................................... …………FileSystem.FileCopy
FileCopy
FileCopy
FileCopy
(使用 Windows 10 专业版、Word 365 专业版)
的在线帮助FileCopy Src, Dest
说它... 将文件复制Src
到Dest
[但] 不适用于当前打开的文件。两个 ... 文件都必须关闭 [by]Close
语句。
但是,该页面上Close
提供的链接的在线帮助连接到Open 语句的 Close 的帮助,它说它“关闭以前用 the 打开的文件”语句,而不是语句。Open
FileCopy
所以我很困惑如何处理这段代码,它将 Document 中的第一个代码模块复制到备份位置,而不是第二个。
图#1:关于应该被复制的内容的信息
图#2:没有原始错误信息On Error
(我不知道为什么所有这些空白行。它们不在我的身体里。)
请暂时忽略所有的 OnError
东西。
当应该复制第二个代码模块时,执行停止并出现错误“找不到文件”。
Sub BackupModules()
Dim prj As VBProject
Dim comp As VBComponent
Dim code As CodeModule
Set prj = ThisDocument.VBProject
Dim k As Integer, n As Integer
Dim Destination As String, Prefix As String
Prefix = "junk"
k = 0: n = 0
On Error GoTo x
For Each comp In prj.VBComponents
On Error GoTo x
k = k + 1
If comp.Type = vbext_ct_StdModule Then
n = n + 1
Destination = Prefix & n
MsgBox "Copying Standard module " & n & " of " & k & " components encountered: <" & comp.Name & "> to " _
& Destination & "; # lines: " & comp.CodeModule.CountOfLines
On Error GoTo x
FileCopy comp.Name, Destination
MsgBox "Success"
Close
Else
x: If Err.Number <> 0 Then: _
msg = "Error # " & Str(Err.Number) & " was generated by " _
& Err.Source & Chr(13) & Err.Description: _
MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext: On Error GoTo 0: Close:
End If
Next
End Sub
然后我开始尝试(如你所见很多)On Error Goto x
放置在不同的地方(一次一个,然后全部,如图所示)和开始x: If Err...
放置在Else
块内的看起来令人讨厌但语法和逻辑正确的行。
图#3:使用后的错误信息On Error
(FWIW,我刚刚Normal
在Err.Source
上面的错误消息部分发现。在线帮助说,“当您的代码中发生意外错误时,会自动填写 Source 属性。对于标准模块中的错误, Source 包含项目名称。对于类模块中的错误,Source 包含一个带有 project.class 形式的名称。”实际上,代码位于 Normal Project 的模块中。)
那么怎么了?我已经尝试了我能想到的一切。我能找到的唯一帮助Close
没有提到它与FileCopy
. 我的Close
用法没有引起错误,但确实Close
关闭了源文件和目标文件?肯定不是。第一次使用FileCopy
工作,文件(可能)没有关闭,因此第二次使用FileCopy
失败。文档说FileCopy
在打开的文件上使用会导致错误。
On Error Goto x
或 to0
既不在这里也不在那里。这就是为什么我一开始就说不要理他们。
问题显然是“如何关闭中提到的两个文件FileCopy
?”
PS根据开场白,我不会这样做。
我想我可以使用Open ... For Input As File#1
并指定模块的名称,如果它可以随时用于编码,也可以Open ... For Output As File#2
用于目标,使用For
循环复制行数(如果可用),然后Close
两者都复制。但我希望在我尝试之前能解决我的问题,因为肯定FileCopy
应该在一个循环中工作(而不是因为关闭不当)。