Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如果没有链接,则在保存时跳过宏以断开链接_Vba_Excel - Fatal编程技术网

Vba 如果没有链接,则在保存时跳过宏以断开链接

Vba 如果没有链接,则在保存时跳过宏以断开链接,vba,excel,Vba,Excel,我设计了一个成本计算电子表格,其中一些成本计算项目与其他工作簿相关联。我有一个宏,所以当我保存一个成本表时,它会断开链接,这样以后成本将被锁定,而不是更新。但是,如果我重新保存我的电子表格,它会调试并说没有要断开的链接。我试图找到一种方法,在链接已经断开后,在第一次保存后绕过这个断开链接宏。我现在唯一能做的就是在我再次尝试保存时进入并删除宏的这一部分。下面是我的整个保存宏,它的第一部分是断开链接的部分。非常感谢您的帮助 Sub Save() 'To break links to Ultra-D

我设计了一个成本计算电子表格,其中一些成本计算项目与其他工作簿相关联。我有一个宏,所以当我保存一个成本表时,它会断开链接,这样以后成本将被锁定,而不是更新。但是,如果我重新保存我的电子表格,它会调试并说没有要断开的链接。我试图找到一种方法,在链接已经断开后,在第一次保存后绕过这个断开链接宏。我现在唯一能做的就是在我再次尝试保存时进入并删除宏的这一部分。下面是我的整个保存宏,它的第一部分是断开链接的部分。非常感谢您的帮助

Sub Save()
'To break links to Ultra-D
ActiveWorkbook.BreakLink Name:="H:\JUNK\Quotes\Al Costing\Ultra-D\Ultra-D.xlsx", Type:=xlExcelLinks
'To Save
Range("D8").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("D7").Select
Dim Proposal As String
Dim Customer As String
Dim System As String


Proposal = Range("D3").Value
Customer = Range("D4").Value
System = Range("D5").Value


ActiveWorkbook.SaveAs Filename:= _
"C:\Users\walkerja\Desktop\Al Quotes\" & Proposal & " " & Customer & " SCR-Al-" & System & " Tsoc.xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

将您的
ActiveWorkBook.BreakLink……
替换为以下内容

如果有任何链接,则在
LinkCheck(1)
中有数据。如果没有数据,则该链接将为空

  If Not IsEmpty(ActiveWorkbook.LinkSources) Then
      ActiveWorkbook.BreakLink Name:="H:\JUNK\Quotes\Al Costing\Ultra-D\Ultra-D.xlsx", Type:=xlExcelLinksEnd
 End if

非常感谢让·皮埃尔的回答。我只是想在下面发布我的最终代码

'To break links
Dim MyLinks As Variant
    MyLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
    If Not IsEmpty(ActiveWorkbook.LinkSources) Then
    For I = 1 To UBound(MyLinks)
    ActiveWorkbook.BreakLink Name:=MyLinks(I), Type:=xlLinkTypeExcelLinks
    Next I
    End If

通常,您希望使用带有某种“标志”的IF语句,并将其保存在其他地方。您可以将此标志存储在隐藏工作表的单元格中。为什么不在隐藏工作表的单元格中写入一些内容呢。如果它符合“firstsave”这样的特殊条件,那么就决定执行中断部分,或者不执行中断部分。我感谢您的回复Jean Pierre。我遇到的唯一问题是它在If Not LinkCheck(1)=Empty上调试,然后在第二次保存时调试。如果我删除(1),它会在第二次保存时修复它,但在第一次保存时会调试。非常感谢,这很有魅力。我对它做了一点修改,并在下面发布了我的最终代码。