我有一些代码用于打开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 回答
除了代码停止,我可以看到你的代码有些问题 .
由于其他工作簿中的代码在打开时触发,代码可能会停止,因此需要停止 .
我看到的其他问题是你没有使用变量引用新打开的工作簿,而是使用
ActiveWorkbook
,这可能并不总是正确的 .复制范围的行使用
Users
作为范围引用,但单元格引用使用当前活动的工作表 .在你做do循环之后我会添加这个代码:
注意我使用
wrkBk
来引用新打开的工作簿 . 复制和粘贴缩短为一行,每个单元格和范围引用使用With wrkbk.Worksheets("Users")
完全限定 .Application.EnableEvents = False
应该在打开工作簿时停止任何代码触发 .