首页 文章

工作簿打开后,Vba代码停止 . 没有错误

提问于
浏览
0

我有一些代码用于打开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

结束子

1 回答

  • 3

    除了代码停止,我可以看到你的代码有些问题 .

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

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

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

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

    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 应该在打开工作簿时停止任何代码触发 .

相关问题