我的主 Excel 工作簿中的一些 VBA 代码出现了问题。我有两段代码。代码 A 运行良好。代码 B 运行不正常。
第一段代码(代码 A)运行良好,它创建一个目录并将 Excel 工作簿保存在其中,目录和文件的名称均从单元格 B4 中提取。
第二段代码(代码 B)进入一个目录并打开一个另存为对话框,并应该用单元格 B4 中的信息填充初始文件名框。但是,除了初始文件名不会自动填充之外,其他一切都正常。以前它还可以;在我更改映射驱动器的所有宏引用之前它还可以正常工作(我将它们从映射字母驱动器更改为 UNC 路径,以便文件可以在网络上使用,即 Z:\In Progress\ 更改为 \10.0.0.4\data\In Progress)。
奇怪的是,在从映射驱动器 -> UNC 路径更改后,我没有遇到任何访问网络的问题。这似乎只是个小故障。
我已经编译了该项目并进行了调试。
如果有人知道如何填充代码 B 的初始文件名,我们将不胜感激。
代码 A
Option Explicit
Sub SaveAsNewJobtoIP()
'This macro creates a New Folder in the In Progress File, named off the BILLING CLIENT Name.
Dim Path As String
Dim InitialName As String
Dim sFileSaveName As Variant
Path = "\\10.0.0.4\data\In Progress\"
If Len(Dir("\\10.0.0.4\data\In Progress\" & ActiveSheet.Range("B4").Value, vbDirectory)) = 0 Then
MkDir Path & ActiveSheet.Range("B4").Value
End If
'This macro saves the workbook with a Dialog and an Initial Filename
InitialName = ActiveSheet.Range("B4").Value & " " & ActiveSheet.Range("H2") & " " & ActiveSheet.Range("I2") & " " & ActiveSheet.Range("J2")
sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Path & InitialName, FileFilter:="Excel Files (*.xlsm), *.xlsm")
If sFileSaveName <> False Then
ActiveWorkbook.SaveAs sFileSaveName
End If
End Sub
代码 B
Option Explicit
Sub SaveAsNewQuoteinJCF()
'This macro saves the workbook with a Dialog and an Initial Filename
Dim Path As String
Dim InitialName As String
Dim sFileSaveName As Variant
Path = "\\10.0.0.4\data\Job Cost Folder\Jill\"
InitialName = "Estimate " & ActiveSheet.Range("B4").Value
sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Path & InitialName, FileFilter:="Excel Files (*.xlsm), *.xlsm")
If sFileSaveName <> False Then
ActiveWorkbook.SaveAs sFileSaveName
End If
End Sub
答案1
我花了一些时间进行研究,试图弄清楚我的本地网络状况,但在评论的帮助下,我发现解决这个问题所需要做的就是:
将 UNC 路径替换为计算机的实际名称。因此我更改了
"\\10.0.0.4\" ---> "\\Server-pc\"
问题解决了。我以为 10.0.0.4 是服务器计算机的名称,但实际上它只是一条路径。将 UNC 路径更改为实际计算机的名称还解决了另一个问题,即宏收到运行时错误 (1004),因为我的同事的 UNC 路径实际上是 10.0.0.3。