首页 > 解决方案 > 如何让依赖下拉列表在导出的工作簿中工作?

问题描述

我对 VBA 还是比较陌生,感觉我的体重有点超出我的体重,所以希望有人能提供帮助。

我需要向我公司的人员发布一个电子表格,他们可以填写并发送回去。这需要多次完成,所以我试图尽可能地自动化。源数据粘贴在“输入”选项卡中 - 然后由用户旋转并输入到模板选项卡中。我可以选择任何用户并运行一个宏来执行此操作并将填写的模板导出到新工作簿。

在此模板选项卡中,我有相关的下拉列表,我已通过数据验证完成 - 这依赖于“编码”选项卡中的命名范围,该选项卡也已导出。一个命名范围显示一个值列表,其他索引在此范围内并将其与所需单元格匹配,以确保仅显示有效组合。

我的问题是新工作簿不得包含任何指向主文件的链接 - 它应该完全独立运行。但是,数据验证/命名范围出了点问题。要么某些命名范围被删除(我知道是哪一点代码在这样做,但没有它会提示您更新链接),或者数据验证公式链接回原始工作簿并且不起作用。如果没有设置这个特定的数据验证,我找不到另一种实现我需要的方法,所以我需要尝试调整我的宏来满足这个要求。

是否可以简单地将模板和编码选项卡以及所有数据验证复制到新工作簿并断开与原始工作簿的所有链接,这样就没有启动提示并且下拉菜单全部工作?


Sub Copy_To_New_Workbook()


Dim wb As Workbook
Dim name As String
Dim ExternalLinks As Variant
Dim x As Long
Dim strFolder As String, strTempfile As String

name = Worksheets("Control").Cells(14, 7).Value

Let FileNameIs = Range("Filepath").Value & Range("FileName").Value

Set wb = Workbooks.Add
ThisWorkbook.Worksheets("Coding").Copy Before:=wb.Sheets(1)
ActiveSheet.name = "Coding"
ThisWorkbook.Worksheets("Transactions").Copy Before:=Worksheets("Coding")
ActiveSheet.name = "Transactions"
With ActiveSheet.UsedRange
    .Value = .Value
End With
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True

ExternalLinks = wb.LinkSources(Type:=xlLinkTypeExcelLinks)

ExternalLinks = wb.LinkSources(Type:=xlLinkTypeExcelLinks)
For x = 1 To UBound(ExternalLinks)
    wb.BreakLink name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
Next x

Dim objDefinedName As Object

   For Each objDefinedName In wb.Names
        If InStr(objDefinedName.RefersTo, "[") > 0 Then
            objDefinedName.Delete
        End If
    Next objDefinedName

On Error GoTo 0

wb.SaveAs Filename:=FileNameIs, FileFormat:=52

ActiveWorkbook.Close

End Sub

标签: excelvba

解决方案


推荐阅读