Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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文件”对话框多次出现_Excel_Vba - Fatal编程技术网

“Excel文件”对话框多次出现

“Excel文件”对话框多次出现,excel,vba,Excel,Vba,我正在使用Application.FileDialog(msoFileDialogOpen)允许用户选择要从中导入数据的文件。但是,在用户选择一个文件后,它会再次弹出“文件”对话框,要求用户选择一个文件。在继续之前,它将执行此操作2-3次 我是否意外地创建了一个循环 Private Sub CommandButton1_Click() Set myFile = Application.FileDialog(msoFileDialogOpen) With myFile .Title =

我正在使用
Application.FileDialog(msoFileDialogOpen)
允许用户选择要从中导入数据的文件。但是,在用户选择一个文件后,它会再次弹出“文件”对话框,要求用户选择一个文件。在继续之前,它将执行此操作2-3次

我是否意外地创建了一个循环

Private Sub CommandButton1_Click()
Set myFile = Application.FileDialog(msoFileDialogOpen)

With myFile
    .Title = "Choose File"

    .AllowMultiSelect = False

    If .Show <> -1 Then
       Exit Sub
       ElseIf .Show <> 0 Then
       FileSelected = .SelectedItems(1)
    End If
End With

'data location & range to copy

mydata = "='[FileSelected]'!$C$10:$C$21" '<< change as required

'link to worksheet
With ThisWorkbook.Worksheets(1).Range("C10:C21") '<< change as required
.Formula = mydata
'convert formula to text
.Value = .Value

End With
End Sub
Private子命令按钮1\u单击()
设置myFile=Application.FileDialog(msoFileDialogOpen)
使用myFile
.Title=“选择文件”
.AllowMultiSelect=False
如果.Show-1那么
出口接头
否则,请显示0
FileSelected=.SelectedItems(1)
如果结束
以
'要复制的数据位置和范围

mydata=“=”[FileSelected]”!$C$10:$C$21“您可以将其缩短:

filepath = Application.GetOpenFilename("All files (*.*),*.*")
If filepath = False Then Exit Sub
MsgBox filepath 

您可以将其缩短:

filepath = Application.GetOpenFilename("All files (*.*),*.*")
If filepath = False Then Exit Sub
MsgBox filepath 

在代码中,调用Show方法两次。因此,对话框将显示两次。请尝试以下方法

Private Sub CommandButton1_Click()
    Dim strPathAndFile As String
    With Application.FileDialog(msoFileDialogOpen)
        .Title = "Choose File"
        .AllowMultiSelect = False
        If .Show <> -1 Then Exit Sub
        strPathAndFile = .SelectedItems(1)
    End With
End Sub
Private子命令按钮1\u单击()
将strPathAndFile设置为字符串
使用Application.FileDialog(msoFileDialogOpen)
.Title=“选择文件”
.AllowMultiSelect=False
如果.Show-1,则退出Sub
strPathAndFile=.SelectedItems(1)
以
端接头

希望这有帮助

在代码中,调用Show方法两次。因此,对话框将显示两次。请尝试以下方法

Private Sub CommandButton1_Click()
    Dim strPathAndFile As String
    With Application.FileDialog(msoFileDialogOpen)
        .Title = "Choose File"
        .AllowMultiSelect = False
        If .Show <> -1 Then Exit Sub
        strPathAndFile = .SelectedItems(1)
    End With
End Sub
Private子命令按钮1\u单击()
将strPathAndFile设置为字符串
使用Application.FileDialog(msoFileDialogOpen)
.Title=“选择文件”
.AllowMultiSelect=False
如果.Show-1,则退出Sub
strPathAndFile=.SelectedItems(1)
以
端接头

希望这有帮助

方法显示的文件对话框类似于
Userform.Show
。因此,每次调用
.Show
时,都会显示对话框

With Application.FileDialog(msoFileDialogOpen)
    .Title = "Choose File"
    .AllowMultiSelect = False
    .Show
    If .SelectedItems.Count = 0 Then
        Exit Sub
    Else
        FileSelected = .SelectedItems(1)
    End If

End With

.Show
方法显示的文件对话框类似于
Userform.Show
。因此,每次调用
.Show
时,都会显示对话框

With Application.FileDialog(msoFileDialogOpen)
    .Title = "Choose File"
    .AllowMultiSelect = False
    .Show
    If .SelectedItems.Count = 0 Then
        Exit Sub
    Else
        FileSelected = .SelectedItems(1)
    End If

End With

If.Show-1
看起来一点也不对劲。如果
,则该条件将
退出Sub
。Show
返回一个
变量/布尔值(
False
),但它也返回一个
变量/字符串
实际文件名,使
strPathAndFile
(wow dat name)未赋值。实际上,根据帮助文件,Show方法
“显示一个文件对话框,并返回一个长字符,指示用户是按了操作按钮(-1)还是按了取消按钮(0)。”。“
。因此它似乎是合适的。而且,文件名实际上是从SelectionItems属性返回的。或者我遗漏了什么?啊,很抱歉,我对做同样事情的其他方法感到困惑。无论如何,在我看来,检查
.SelectedItems.Count=0
会更容易阅读。它说什么,说什么确实如此。是的,我同意你的看法。使用
.SelectedItems.Count=0
更容易阅读。
如果.Show-1
看起来一点也不对劲。如果
如果
,则该条件将
退出Sub
。Show
返回一个
变量/布尔值(
False
),但它也会返回一个
变量/字符串
实际文件名,而将
strPathAndFile
(wow dat name)保留为未分配。实际上,根据帮助文件,Show方法
”会显示一个文件对话框,并返回一个长字符串,指示用户是按了操作按钮(-1)还是按了取消按钮(0)。“
。因此它似乎是合适的。而且,文件名实际上是从SelectionItems属性返回的。或者我遗漏了什么?啊,很抱歉,我对做同样事情的其他方法感到困惑。无论如何,在我看来,检查
.SelectedItems.Count=0
会更容易阅读。它说什么,说什么是的,我同意你的看法。使用
.SelectedItems.Count=0
更容易阅读。