Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在“刷新数据”宏的末尾添加If/Else条件_Excel_Vba - Fatal编程技术网

Excel 在“刷新数据”宏的末尾添加If/Else条件

Excel 在“刷新数据”宏的末尾添加If/Else条件,excel,vba,Excel,Vba,我有一个宏,它是从工作簿第1页上的按钮生成的。运行宏时,它将从我的工作簿中删除密码保护,刷新与另一工作簿的数据链接(宏将用户带到目录路径,但用户必须高亮显示工作簿,然后选择“确定”),然后宏将通过将密码保护放回我的工作簿来完成 只要用户高亮显示工作簿并选择“确定”,此操作就可以正常工作。如果用户决定选择“取消”,宏将不会完成 如果用户选择“取消”而不是突出显示工作簿并选择“确定”,我是否可以将If/Else条件写入宏以避免调试窗口。宏在没有If/Else元素的情况下运行良好 Sub Refres

我有一个宏,它是从工作簿第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

使用
GetOpenFilename
查找路径和文件。如果取消对话框,通常包含完整路径和文件名的字符串将变为状态为“False”的字符串


这与布尔值False不同。这有点不同寻常,但以上是我找到的最好的处理方法。

不确定我在这里做错了什么。宏运行,但我必须自己选择完整路径。如果我取消MsgBox的工作,并非常满意的元素。但是,我不知道为什么我必须自己输入完整的目录路径。完整路径在
fn
中。这可以通过查看VBE的即时窗口(VBE中的Ctrl+G)来演示。我正在学习VB代码的早期阶段。我在VBE中,选择了Ctrl+G,这将打开即时窗口,但该窗口中没有任何内容。如果运行我提供的代码并选择一个文件,则完整路径和文件名将存储在
fn
中。我的代码将其输出到即时窗口进行检查。您可以使用它打开工作簿并处理更新。如果提供有关“宏将用户带到目录路径,但用户必须突出显示工作簿,然后选择“确定”的详细信息,则回答此问题会更容易。ThisWorkbook.UpdateLink是否正在打开对话框,或者上面是否有未发布的代码?
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