我有一些代码用于打开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
End Sub
答案 0 :(得分:3)
除了代码停止之外,我可以看到你的代码有些问题。
由于其他工作簿中的代码在打开时触发,代码可能会停止,因此需要停止。
我看到的其他问题是您没有使用变量引用新打开的工作簿,而是使用Subject
,这可能并不总是正确的。
您复制范围的行使用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")
应该在工作簿打开时停止任何代码触发。
答案 1 :(得分:0)
但如果涉及到 Shift 键,即使是 Darren Bartrup-Cook 的其他好答案也不够! 2005 年 XL 中的一个错误的痕迹!在击键组合中使用 Shift 键运行宏将导致在目标工作簿打开后停止执行。例如,CTRL + SHIFT + q 运行宏将不起作用; CTRL + q 会。