Excel无法识别已打开工作簿,VBA修改链接失败求助
问题解决办法
核心问题定位
你的代码存在逻辑错误:打开前一日工作簿(wb)后,你错误地尝试修改这个新打开工作簿的链接,而非需要更新链接的当前工作簿(wb1)。这是导致Excel无法识别链接状态、修改失败的主要原因。
修正后的代码
Sub OpenLink() Dim strGenericFilePath As String: strGenericFilePath = "K:\Finance\Unallocated Cash\" Dim wb1 As Workbook: Set wb1 = ThisWorkbook Dim ws As Worksheet: Set ws = wb1.Sheets("UTM Unal Cash Report") Dim strYear As String: strYear = Year(Date) & "\" Dim strMonth As String: strMonth = Format(Date, "mm.Mmmm") & "/" Dim DateStamp As String: DateStamp = Format(ws.Range("L2"), "dd.mm.yy") Dim strFileName As String: strFileName = "UTM UT Unallocated " & DateStamp & ".xlsm" Dim strUAC As String: strUAC = "UTM\" Dim NewTrendlink As String: NewTrendlink = strGenericFilePath & strYear & strMonth & strUAC & strFileName Dim OldTrendlink As String: OldTrendlink = "K:\Finance\Unallocated Cash\2023\09.September\UTM\UTM UT Unallocated 11.09.23.xlsm" ' 检查目标工作簿是否已打开,避免重复打开 Dim wb As Workbook On Error Resume Next Set wb = Workbooks(strFileName) On Error GoTo 0 ' 若未打开则打开 If wb Is Nothing Then Set wb = Workbooks.Open(NewTrendlink, Password:="utm", ReadOnly:=True) End If ' 获取当前工作簿的链接源(而非新打开的工作簿) Dim lsArr lsArr = wb1.LinkSources(xlExcelLinks) If IsEmpty(lsArr) Then MsgBox "未找到Excel链接源。", vbCritical Exit Sub End If ' 检查旧链接是否存在(兼容路径和仅文件名两种格式) Dim linkFound As Boolean linkFound = False Dim i As Integer For i = LBound(lsArr) To UBound(lsArr) ' 匹配完整路径或仅工作簿名称 If lsArr(i) = OldTrendlink Or lsArr(i) = Mid(OldTrendlink, InStrRev(OldTrendlink, "\") + 1) Then linkFound = True Exit For End If Next i If Not linkFound Then MsgBox "当前工作簿未链接到 """ & OldTrendlink & """。", vbCritical Exit Sub End If ' 修改当前工作簿的链接:若目标工作簿已打开,可直接用文件名(Excel会自动识别已打开的工作簿) wb1.ChangeLink OldTrendlink, wb.Name, xlLinkTypeExcelLinks MsgBox "工作簿已成功链接到 """ & NewTrendlink & """。", vbInformation ' 可选:切换回当前工作簿 wb1.Activate End Sub
关键修改说明
- 修正操作对象:将链接源获取(
LinkSources)和链接修改(ChangeLink)的对象从wb改为wb1,确保修改的是当前工作簿的链接。 - 增加已打开工作簿检查:先尝试通过文件名获取已打开的工作簿,避免重复打开,同时确保后续链接修改时Excel能识别到工作簿状态。
- 兼容链接源格式:Excel存储链接时,若目标文件已打开,可能仅保存文件名而非完整路径,因此增加了对旧链接文件名的匹配检查。
- 优化链接修改方式:当目标工作簿已打开时,直接使用工作簿的
Name作为新链接目标,Excel会自动关联已打开的工作簿,避免路径识别问题。
内容的提问来源于stack exchange,提问作者mikchadd
相关产品推荐
相关产品推荐

