【问题标题】:Excel VBA: Limiting Workbook to local MacroExcel VBA:将工作簿限制为本地宏
【发布时间】:2017-05-11 22:08:03
【问题描述】:

我编写了将两个电子表格复制到新工作簿的代码,其中嵌入了工作表中的宏,但是,调用宏的按钮仍在调用原始工作簿,而不是新工作簿中的重复宏。这个新工作簿将被发送给无法访问原始工作簿的其他人,所以我的问题是,有没有办法自动更新按钮以调用新工作簿中的宏,我将如何去做?

导出代码如下:

Sub ExportPropWB()
    Dim a As String, b As String, c As String, Mainbook As Workbook, info As Range, FileExtStr As String, FileFormatNum As Long, foldername As String, datestring As String, Newbook As Workbook, info1 As Range, info2 As Range, paste1 As Range, paste2 As Range
    Set Mainbook = Application.ThisWorkbook
    a = Mainbook.Worksheets("Application").Range("Client")
    b = Mainbook.Worksheets("Application").Range("ProjectName")
    datestring = Format(Now, "yyyy-mm-dd")
    c = datestring & " - " & a & " Proposal " & b
    foldername = Mainbook.Path & "\proposal\"

    Application.ScreenUpdating = False

    Mainbook.Worksheets("Equipment").Copy
    Set Newbook = Application.ActiveWorkbook

    Set info1 = Mainbook.Worksheets("equipment").Range("A1:AU343")
    Set paste1 = Newbook.Worksheets("equipment").Range("A1:AU343")

    paste1.Value = info1.Value

    Mainbook.Worksheets("Proposal").Copy after:=Newbook.Worksheets("Equipment")

    Set info2 = Mainbook.Worksheets("Proposal").Range("A1:AG1480")
    Set paste2 = Newbook.Worksheets("Proposal").Range("A1:AG1480")

    paste2.Value = info2.Value

    FileExtStr = ".xlsm"
    xFile = foldername & c & " " & FileExtStr
    Newbook.SaveAs Filename:=xFile, FileFormat:=52

    Application.ScreenUpdating = True  
End Sub

按钮调用的代码如下:

Sub HidePage02()
    With ThisWorkbook.Worksheets("Proposal").Shapes("Hide2").TextFrame2.TextRange.Characters
        If .Text = "Hide Page 2" Then
            .Text = "Show Page 2"
            Rows("75:148").Hidden = True
            ThisWorkbook.Worksheets("Proposal").Shapes("BHIP2").Visible = False
            Thisworkbook.worksheets("Proposal").Range("Page2") = "Yes"
        Else
            .Text = "Hide Page 2"
            With ThisWorkbook.Worksheets("Proposal").Shapes("Hide2")
                Rows("75:148").Hidden = False
                Thisworkbook.worksheets("Proposal").Range("Page2") = "no"
                ThisWorkbook.Worksheets("Proposal").Shapes("BHIP2").Visible = True
            End With
        End If
    End With
End Sub

感谢您的时间和帮助。

【问题讨论】:

  • ThisWorkbook 指的是包含宏的工作簿,因此您需要更改引用或为您的子添加参数。
  • SJR:代码应该只引用包含它的工作簿,问题是当复制工作表时,按钮仍在尝试访问原始工作簿中的宏,即使那些宏被复制到新书中。
  • 好的,我现在明白了。运行代码时两个工作簿都打开了吗?如果没有,你能关闭原件并检查发生了什么吗?
  • 当我关闭原书并点击新书上的按钮时,它会重新打开原书并激活那里的按钮
  • 我认为您的按钮没有将分配更改为原始宏会发生什么 - 尝试在新工作簿中重新分配宏(使用 OnAction)。如果您对此感到困惑,请大声喊叫。

标签: vba excel


【解决方案1】:

SRJ提供的答案:

With ThisWorkbook.Worksheets("Proposal")
    .Shapes("Hide2").OnAction = "Sheet22.HidePage02"
End With

此代码将形状更新为新宏,其中 Proposal 是工作表,Hide2 是对象的名称,“Sheet22.HidePage02”是本地宏名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多