excel - 使用函数打开和更新外部工作簿中的值,但返回源错误
问题描述
我一直在使用另一个 StackOverflow 问题中的函数(很抱歉,我找不到原始答案!)来帮助遍历 L 列中的许多单元格,其中包含一个公式,该公式会吐出我们的超链接文件路径。这意味着打开每个(工作簿),更新值,然后在打开下一个之前保存并关闭工作簿。见下文。
Sub List_UpdateAndSave()
Dim lr As Long
Dim i As Integer
Dim WBSsource As Workbook
Dim FileNames As Variant
Dim msg As String
' Update the individual credit models
With ThisWorkbook.Sheets("List")
lr = .Cells(.Rows.Count, "L").End(xlUp).Row
FileNames = .Range("L2:L" & lr).Value
End With
For i = LBound(FileNames, 1) To UBound(FileNames, 1)
On Error Resume Next
If FileNames(i, 1) Like "*.xls*" Then
Set WBSsource = Workbooks.Open(FileNames(i, 1), _
ReadOnly:=False, _
Password:="", _
UpdateLinks:=3)
If Err = 0 Then
With WBSsource
'do stuff here
.Save
.Close True
End With
Else
msg = msg & FileNames(i, 1) & Chr(10)
On Error GoTo 0
End If
End If
Set WBSsource = Nothing
Next i
If Len(msg) > 0 Then
MsgBox "The Following Files Could Not Be Opened" & _
Chr(10) & msg, 48, "Error"
End If
End Sub
现在的问题是我正在使用它在网络驱动器上工作,因此它会导致连接/编辑链接部分的路径问题。每个文件都存储在S:\...
其中,由于使用超链接公式,将无法找到源数据。请参阅下面的示例图像,该文件是通过我的原始工作簿中的超链接单元格打开的。当我去更新它的编辑链接部分时,它会显示这些错误。
如果我在 Windows 资源管理器中打开该字母驱动器并找到该文件,则它可以正常工作。打开,更新值>保存>关闭,它说未知...
如果在单元格中使用超链接公式打开(也指向S:\..
),则表示它包含无法更新的链接。我选择编辑链接,它们都是“错误:找不到源”。它们上的位置也以\\\corp\...
and not开头S:\
。
有任何解决这个问题的方法吗?为冗长的问题道歉。
解决方案
我将此添加为答案,因为它包含代码并且评论有点长。
我不确定这是否是你所追求的。
该代码将获取映射的驱动器并返回网络驱动器,或者 Excel 文件反之亦然。 DriveMap
是包含最终字符串的变量 - 您可能希望适应一个函数。
Sub UpdatePath()
Dim oFSO As Object
Dim oDrv As Object
Dim FileName As String
Dim DriveMap As String
Set oFSO = CreateObject("Scripting.FileSystemObject")
FileName = Range("A1")
If InStr(oFSO.GetExtensionName(FileName), "xls") > 0 Then
For Each oDrv In oFSO.drives
If oDrv.sharename <> "" Then
'Changes \\corp\.... to S:\
If InStr(FileName, oDrv.sharename) = 1 Then
DriveMap = Replace(FileName, oDrv.sharename, oDrv.Path)
End If
'Changes S:\ to \\corp\....
' If InStr(FileName, oDrv.Path) = 1 Then
' DriveMap = Replace(FileName, oDrv.Path, oDrv.sharename)
' End If
End If
Next oDrv
End If
End Sub
推荐阅读
- reactjs - 错误导致 webpack 无法构建
- javascript - 消息在它需要所有数据之前被发送,这意味着它在所有消息中发送了几条具有相同数据的消息
- amazon-web-services - 如何将大型黑名单与 AWS WAF 集成
- reactjs - axios 和 fetch 在 React 中返回空响应数据
- c++ - boost::interprocess::interprocess_condition::timed_wait 永远等待
- android - 如何使用 recylerview 和 Fragments 和 viewmodel 显示 cardview 项目
- c# - 从 C# 中的文本文件中读取自定义文本数据
- python - 在增加样本量的同时使用 ttest
- github - 任何人都可以协助在 Github 上显示正确的徽章(报道)
- javascript - 如何优先加载在多个 ajax 请求中返回的图像