excel 如何使用VBA将宏分配给窗体按钮

abithluo  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(291)

我试图创建一个“导出按钮”,该按钮当前创建一个新的工作簿,其中包含现有工作表中的特定工作表,取消隐藏它们,其中一个工作表包含一个按钮。此按钮名为Export Email Button。它是宏分配给当前工作簿使用的工作表,总是复制/导出,这个宏名为ExportEmail()一旦我复制这些工作表,选择按钮,并改变OnAction,似乎没有更新。

Sheets(mySheets).Copy
ActiveWorkbook.Worksheets("ExportEmail").Visible = xlSheetVisible

Dim ExternalLinks As Variant
Dim x As Long
'Purpose: To break external links
ExternalLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
For x = 1 To UBound(ExternalLinks)
    ActiveWorkbook.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
Next x

'Here the issue lays
ActiveWorkbook.Worksheets("ExportEmail").Buttons("Export Email Button").OnAction = "NewMacro"
'New button is assigned to "'Names Update Master.xlsm'!NewMacro"

ActiveWorkbook.SaveAs myFolder & NewName & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close savechanges:=False

更新

' "'" & NewName & ".xlsm'" - This should return "'June 2023.xlsm'", but instead turns "'C:/June 2023.xlsm'"
ActiveWorkbook.Worksheets("ExportEmail").Buttons("Export Email Button").OnAction = "'" & NewName & ".xlsm'!Sheet4.ExportEmail"
9jyewag0

9jyewag01#

如果要将宏分配给新创建的工作簿,请将工作簿名称添加到宏中,并用感叹号分隔。如果您稍后使用其他名称保存文件,Excel将自动更新OnAction-方法。
但是,我在这里看到另一个问题:通过复制工作表创建新工作簿时,只复制工作表模块中的宏。因此,如果你想复制NewMacro-例程,你应该把它放到ExportEmail的工作表模块中。在这种情况下,您需要通过在工作表的codeName前面加上一个点来调用它。请注意,图纸的代号不是图纸名称本身。
尝试以下操作(注意,我已经为新工作簿和-sheet使用了变量)。

ThisWorkbook.Sheets(mySheets).Copy
Dim newWB as Workbook, newWS as Worksheet
set newWB = ActiveWorkbook
set newWS = newWB.Sheets(1)
newWS.Visible = xlSheetVisible

Dim ExternalLinks As Variant
Dim x As Long
'Purpose: To break external links
ExternalLinks = newWB.LinkSources(Type:=xlLinkTypeExcelLinks)
For x = 1 To UBound(ExternalLinks)
    NewWB.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
Next x

' This should result in something like "Book2!Sheet1.NewMacro"
newWs.Buttons("Export Email Button").OnAction = newWB.Name & "!" & newWS.codeName & ".NewMacro"

newWB.SaveAs myFolder & NewName & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
newWB.Close savechanges:=False

相关问题