我有一个宏,它是从我工作簿的第1页上的按钮生成的。当宏运行时,它从我的工作簿中删除密码保护,刷新与另一个工作簿的数据链接(宏将用户带到目录路径,但用户必须突出显示工作簿,然后选择确定),宏然后通过放置密码完成保护我的工作簿。
只要用户突出显示工作簿并选择“确定”,这就可以正常工作。如果用户决定选择取消,宏将无法完成。
如果用户选择取消而不是突出显示工作簿并选择确定,是否存在可写入宏的If / Else条件以避免调试窗口。宏没有If / Else元素,效果很好。
Sub RefreshData()
'
'RefreshData Macro
'Unprotect, Refresh Data, Protect
'
Application.ScreenUpdating = False
With Sheet4
.Protect Password:="password", UserInterfaceOnly: = True
ThisWorkbook.UpdateLink Name:=ThisWorkbook.LinkSources
If ......... = False Then
' Cancel was selected and Data Not Refreshed
Else
' OK was selected and Data Refreshed
End If
End With
End Sub
答案 0 :(得分:0)
使用GetOpenFilename
找到路径和文件。如果取消对话框,通常包含完整路径和文件名的字符串将变为一个字符串,表示" False" 。
Dim fn As String
fn = Application.GetOpenFilename(FileFilter:="Excel Files (*.xl*), *.xl*", _
Title:="Select a workbook to update from")
If fn = "False" Then
MsgBox "Stopping because you did not select a file"
Else
' fn contains the full path and filename. e.g. c:\temp\MyWorkBook.xlsx
' wait until you get here before you unprotect the workbook
Debug.Print CStr(fn)
' do the update
' reprotect the workbook
End If
这与布尔值 False 不同。它有点与众不同,但以上是我发现处理它的最佳方式。