1

我编写了一个简单的宏,用于将所有工作簿保存为单独的 CSV 文件。对于 * D:\MyFolder* 之类的路径,这在我的本地机器(英语语言)上运行良好。

但是,当我在另一台启用了日语的 Windows 机器上尝试相同的宏时,我收到 1004SaveAS方法错误。

文件路径如D:¥MyFolder¥

以下是导致错误的我的代码:

pathSeparator = Application.PathSeparator

strPath = InputBox("输入现有目录路径,如 d:\someDirectoryName, d:", , , 1000)

SaveToDirectory = strPath & pathSeperator & "csv" & pathSeperator
If Dir(strPath & pathSeperator & "csv", vbDirectory) = "" Then

fso.CreateFolder SaveToDirectory
Else

fso.DeleteFolder strPath & pathSeperator & "csv"
fso.CreateFolder SaveToDirectory

End If

For Each WS In ThisWorkbook.Worksheets
    newName = WS.Name & "-" & Format(Date, "yyyy-mm-dd") & "-" & Format(Time, "hhmmss")
    WS.Copy
    ActiveWorkbook.SaveAs SaveToDirectory & newName, xlCSVMSDOS, Local:=True
    ActiveWorkbook.Close Savechanges:=False
Next
4

2 回答 2

1

在日文机器上,您是否尝试过将 Visual Basic 编辑器上的字体更改为日文字体?

这可以从工具->选项->格式选项卡中完成。

编辑 22/08/13

有点远射,但我读过 ASCII 中的日元字符与英语机器上的 / 字符相同,因此使用 Chr(92) 应该适用于两者。在英语机器上它会显示为 / whislt 在日语机器上它会带有日元符号。一个简单的测试是在日本机器上运行以下宏,看看会发生什么。

Sub TestSeperator()

MsgBox Chr(92)

End Sub

如果是这种情况,那么您需要进行如下更改:

SaveToDirectory = strPath & Chr(92) & "csv" & Chr(92)
If Dir(strPath & Chr(92) & "csv", vbDirectory) = "" Then

fso.CreateFolder SaveToDirectory
Else

fso.DeleteFolder strPath & chr(92) & "csv"
fso.CreateFolder SaveToDirectory
于 2013-08-21T00:47:40.853 回答
0

我已经在我的英语机器上试用了您的代码,并在我输入包含最后“\”的目录路径时设法引发了 1004 错误

我已经修改了代码,以便在路径分隔符不存在时添加路径分隔符,其余代码假定它已经在 strPath 中。

pathSeperator = Application.PathSeparator

strPath = InputBox("Enter EXISTING Directory path like d:\someDirectoryName, d:", , , 1000)
Set fso = New FileSystemObject

If Right(strPath, 1) <> pathSeperator Then 'added if clause
    strPath = strPath & pathSeperator
End If

SaveToDirectory = strPath & "csv" & pathSeperator  'Removed one pathSeperator
If Dir(strPath & pathSeperator & "csv", vbDirectory) = "" Then

fso.CreateFolder SaveToDirectory
Else

fso.DeleteFolder strPath & "csv" 'Removed one pathSeperator
fso.CreateFolder SaveToDirectory

End If

For Each WS In ThisWorkbook.Worksheets
    newName = WS.Name & "-" & Format(Date, "yyyy-mm-dd") & "-" & Format(Time, "hhmmss")
    WS.Copy
    ActiveWorkbook.SaveAs SaveToDirectory & newName, xlCSVMSDOS, Local:=True
    ActiveWorkbook.Close Savechanges:=False
Next
于 2013-08-18T22:29:36.403 回答