当其他WB在打开时显示userform,vba宏打开其他WB并执行宏失败

时间:2016-08-04 11:10:10

标签: excel vba excel-vba

由于主题意味着我遇到了问题,我找不到任何解决方案。

我有一个工作簿(1),目的是打开其他WB并在其中运行宏。 一切都像魅力一样,除非其他WB有Workbook_Open()事件来打开Userform(通常它会询问WB是否应该更新)。然后我得到错误代码1004,我的代码失败。

当我打开另一个WB时,我怎么能阻止Workbook_Open事件触发?

我已尝试设置Application.EnableEvents = False,但这不相关。

非常感谢您对此主题的任何帮助!

以下是打开WB的代码

Public Function wbTargetOpen(sTargetPath As String, SPassword As String) As Workbook

Dim sWBName As String

sWBName = Mid(sTargetPath, InStrRev(sTargetPath, "\") + 1, Len(sTargetPath) - InStrRev(sTargetPath, "\") + 1)

If WorkbookIsOpen(sWBName) Then

    Set wbTargetOpen = Workbooks(sWBName)

    If wbTargetOpen.ReadOnly = True Then
        wbTargetOpen.Close
        Set wbTargetOpen = Workbooks.Open(FileName:=sTargetPath, UpdateLinks:=0, ReadOnly:=False, WriteResPassword:=SPassword)
    End If

Else
    Set wbTargetOpen = Workbooks.Open(FileName:=sTargetPath, UpdateLinks:=0, ReadOnly:=False, WriteResPassword:=SPassword)
End If

If wbTargetOpen.ReadOnly Then sErrorCode = "ReadOnly"

结束功能

2 个答案:

答案 0 :(得分:3)

您所要做的就是在启动用户表单的其他工作簿中添加一个单词VbModeless

Private Sub Workbook_Open()
    UserForm1.Show vbModeless
End Sub

vbModeless将启动表单,但也允许您的宏运行。

答案 1 :(得分:1)

在运行宏之前关闭其他用户表单。

@IBOutlet weak var vol1: UISlider!

@IBAction func volAdjust1(sender: AnyObject) {
    FourPlayers.audioPlayers[0].volume = vol1.value
}