excel - 如何让依赖下拉列表在导出的工作簿中工作?
问题描述
我对 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
解决方案
推荐阅读
- android - 数据由异步任务加载的 ViewModel
- c# - 将 DataGridView 的特定单元格设置为“从左到右”对齐
- php - PHP如何从两个表中获取数据
- angular - Tomcat 无法将 cpho.html 和 hhpnz.html 文件识别为 index.html 文件
- xcode - 为什么我的故事板上的按钮不在 stackView 的中心?
- spotify - Mopidy Node-Red Node 无法播放 Spotify 曲目或专辑
- jenkins - 如何找出 Jenkins 克隆我的仓库的位置
- html - 仅当存在特定子项时,才将样式应用于父项的最后一个子项
- python - spaCy:自定义属性不正确匹配?
- python - 在 Selenium Python 中关闭浏览器弹出窗口