【问题标题】:Vba code stops after workbook open. No errors工作簿打开后 Vba 代码停止。没有错误
【发布时间】:2017-06-08 09:55:51
【问题描述】:

我有一些代码用于打开 xlsm 工作簿,从中复制一些数据并将其与代码一起粘贴到工作簿中。两个工作簿都受密码保护,代码受密码保护。我有一些代码设置为在保存、打开和关闭之前运行,这些代码会锁定工作簿。

所以问题是在工作簿被 vba 打开后代码停止并且没有错误,如下所示。我认为这与 shift 键有关,这是我在网上看到的 open 方法的问题,但我更改了代码来解决这个问题,问题仍然存在。然后我尝试删除正在打开的工作簿中打开的代码并且它有效。为什么是这样?我之前使用打开代码的工作簿运行过这样的代码,并且运行良好。

我正在使用 Excel 2013。

Sub User_Update()

Application.ScreenUpdating = False

Dim strCurrentProgram As String
Dim MainProgramName As String
Dim strLocation As String

strLocation = "X:\Produktionsmesstechnik\Gehaeuse_Freigabe\"
strCurrentProgram = Dir(strLocation & "*.xlsm")

Do While strCurrentProgram <> ""
    If InStr(strCurrentProgram, "Gehäuse Freigabe Program Ver") = 1 Then

        If MainProgramName = "" Then
            MainProgramName = strCurrentProgram
        ElseIf CInt(Mid(MainProgramName, 29, 3)) < CInt(Mid(strCurrentProgram, 29, 3)) Then
            MainProgramName = strCurrentProgram
        End If

    End If
    strCurrentProgram = Dir
Loop

Workbooks.Open Filename:=strLocation & MainProgramName <<<< CODE STOPS HERE

ActiveWorkbook.Sheets("Users").Range(Cells(4, 1), Cells(100, 11)).Copy
Call UserPassword_Unlock
ThisWorkbook.Sheets("Users").Range("A4").Paste
ThisWorkbook.Save
Workbooks(MainProgramName).Close
Call UserPassword_Lock   

结束子

【问题讨论】:

标签: vba excel


【解决方案1】:

除了代码停止之外,我还发现您的代码存在一些问题。

由于其他工作簿中的代码在打开时触发,代码可能正在停止,因此需要停止。

我看到的其他问题是您没有使用变量引用新打开的工作簿,而是使用ActiveWorkbook,这可能并不总是正确的。

复制范围的行使用Users 作为范围引用,但单元格引用使用当前活动的工作表。

在你的循环之后我会添加这个代码:

Dim wrkBk As Workbook

Application.EnableEvents = False
Set wrkBk = Workbooks.Open(strLocation & MainProgramName)
Call UserPassword_Unlock
With wrkBk.Worksheets("Users")
    .Range(.Cells(4, 1), .Cells(100, 11)).Copy _
        Destination:=ThisWorkbook.Worksheets("Users").Range("A4")
End With
ThisWorkbook.Save
wrkBk.Close SaveChanges:=False
Call UserPassword_Lock
Application.EnableEvents = True  

注意我使用wrkBk 来引用新打开的工作簿。复制和粘贴将缩短为单行,每个单元格和范围引用使用 With wrkbk.Worksheets("Users") 完全限定。
Application.EnableEvents = False 应在打开工作簿时停止任何代码触发。

【讨论】:

  • 传奇!我刚刚从您的代码中将 Save:= False 更改为 SaveChanges:= False 并且它第一次工作。我会投票赞成你的答案,但我没有足够的代表。还是谢谢!
  • 啊,是的,SaveChanges - 抱歉没有考虑。
【解决方案2】:

但如果涉及 Shift 键,即使是 Darren Bartrup-Cook 的其他很好的答案也不够! 2005 年 XL 中的一个错误的痕迹!在击键组合中使用 Shift 键运行宏将导致在目标工作簿打开后停止执行。例如,CTRL + SHIFT + q 运行宏将不起作用; CTRL + q 将。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多