保存外部工作簿后删除名称管理器中的所有输入

Posted

技术标签:

【中文标题】保存外部工作簿后删除名称管理器中的所有输入【英文标题】:Deleting all input in the Name Manager after saving external workbook 【发布时间】:2021-06-29 09:32:53 【问题描述】:

我目前正在制作一个宏,它创建一个目录,然后以不同的语言将其保存为外部文件。每当我使用下面的 VBA 脚本保存文件时,文件仍然很大(2MB+),但每当我打开文件并删除名称管理器中的所有引用(这些似乎也被复制)时,文件只有 30/40 KB。

是否有 VBA 公式可以自动删除名称管理器中的公式(仅在外部副本中,不在原始文件中!)?

Sub NIP_Version()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Workbooks("Opbouw catalogus.xlsm").Activate

filenaam = ActiveWorkbook.Path & "\" & "Excel prijslijst" & "\" & Sheets("Catalogus").Range("A1").Text & " " & Sheets("Catalogus").Range("G2").Text

'Quotation blad copy
Sheets("Catalogus").Select

'paste as values

Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Dim LastRowNIP As Long
With ActiveSheet
LastRowNIP = .Cells(.Rows.Count, "E").End(xlUp).Row
End With

Set example = Range("A5:G" & LastRowNIP)

example.Value = example.FormulaR1C1

Columns("F").EntireColumn.AutoFit

'Save
Application.ScreenUpdating = True
Sheets("Catalogus").Range("A1").Select
ActiveSheet.Copy
ActiveWorkbook.Sheets("Catalogus").SaveAs Filename:=filenaam, FileFormat:=51

Application.DisplayAlerts = True

ActiveWorkbook.Close SaveChanges:=False

【问题讨论】:

【参考方案1】:
    Sub remove_names()

        Dim xName As Name

            For Each xName In Application.ThisWorkbook.Names

                xName.Delete

            Next xName

     End Sub

【讨论】:

您好乔,感谢您的帮助。但这似乎还行不通。我收到错误消息“1004”,我输入的名称无效。我刚刚检查了它,但还不能真正解决它。 Dim 的命名是否正确?在此先感谢:) 嗨 Rob,我已经对此进行了测试,它对我有用。它会为我删除存储在您的名称管理器中的所有本地名称。您可以发送您的名称管理器的屏幕截图以及它中断的“调试错误”行吗? "xName" 在我的代码 sn-p 中可以称为你喜欢的任何东西,只要它在以下几行中正确引用 感谢您的帮助。我收到的错误是:运行时错误“1004”您输入的名称无效。原因可能包括: - 名称不以字母或下划线开头。 - 名称包含空格或其他无效字符。 - 名称与 Excel 内置名称或工作簿中另一个对象的名称冲突。 我贴出来了。已经感谢您的帮助:)【参考方案2】:
Sub NIP_Version()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Workbooks("Opbouw catalogus.xlsm").Activate

filenaam = ActiveWorkbook.Path & "\" & "Excel prijslijst" & "\" & Sheets("Catalogus").Range("A1").Text & " " & Sheets("Catalogus").Range("G2").Text

'Quotation blad Copy
Sheets("Catalogus").Select

'Paste as value

Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Dim LastRowNIP As Long
With ActiveSheet
LastRowNIP = .Cells(.Rows.Count, "E").End(xlUp).Row
End With

Set example = Range("A5:G" & LastRowNIP)

example.Value = example.FormulaR1C1

Columns("F").EntireColumn.AutoFit

'Save
Application.ScreenUpdating = True
Sheets("Catalogus").Range("A1").Select
ActiveSheet.Copy
ActiveWorkbook.Sheets("Catalogus").SaveAs Filename:=filenaam, FileFormat:=51

Sub remove_names()

Dim xName As Name

    For Each xName In Application.ThisWorkbook.Names

            xName.Delete

    Next xName

End Sub

Application.DisplayAlerts = True

ActiveWorkbook.Close SaveChanges:=False

Workbooks("Prijslijst maken.xlsm").Activate

【讨论】:

以上是关于保存外部工作簿后删除名称管理器中的所有输入的主要内容,如果未能解决你的问题,请参考以下文章

如何在任务管理器中添加名称到程序

已删除的数据库仍显示在对象资源管理器中

如何在 Microsoft azure 存储资源管理器工具中删除表列名称?

c# - 如何从应用程序中删除(32位) - 以任务管理器结尾

如何在任务管理器中使用不同的进程名称(对于当前进程)名称?

在任务管理器中更改进程名称[重复]