如何使依赖的下拉列表在导出的工作簿中工作?

时间:2019-03-25 19:15:20

标签: excel vba

我对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

0 个答案:

没有答案