Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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_Outlook_Filepicker - Fatal编程技术网

Excel 宏中的文件选择器在后台打开对话框

Excel 宏中的文件选择器在后台打开对话框,excel,vba,outlook,filepicker,Excel,Vba,Outlook,Filepicker,我开发了一个Outlook宏,允许用户选择并打开excel文件 问题是“文件”对话框除了在后台打开外,并没有在所有内容的顶部打开。这样,对于用户来说,Outlook应用程序似乎被卡住了,而它只是在等待用户在所有其他窗口后面的“文件选择器”对话框中选择一个文件 代码如下: Dim SigFolder2 As String Dim fd As Office.FileDialog Dim selectedItem As Variant Dim ExcelFileName As String Dim F

我开发了一个Outlook宏,允许用户选择并打开excel文件

问题是“文件”对话框除了在后台打开外,并没有在所有内容的顶部打开。这样,对于用户来说,Outlook应用程序似乎被卡住了,而它只是在等待用户在所有其他窗口后面的“文件选择器”对话框中选择一个文件

代码如下:

Dim SigFolder2 As String
Dim fd As Office.FileDialog
Dim selectedItem As Variant
Dim ExcelFileName As String
Dim FileName As String
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook


'Suggested Folder--Downloads
SigFolder2 = "C:\Users\" & Environ("UserName") & "\Downloads\"

'Dialog Settings

Set fd = objExcel.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
 .InitialFileName = SigFolder2
 .AllowMultiSelect = False
 .Title = "Select Signature File"
End With

'Getting the file
If fd.Show = -1 Then
    For Each selectedItem In fd.SelectedItems
        SigFolder = selectedItem
    Next
Else
Exit Sub
End If

ExcelFileName = SigFolder
FileName = Left(fso.GetFileName(ExcelFileName), InStr(fso.GetFileName(ExcelFileName), ".") - 1)
Debug.Print ExcelFileName 'file Path with filename

有没有办法纠正这个问题?

这个问题是由于Excel windows对Outlook windows一无所知。如果要使子窗口对话框始终位于另一个窗口的顶部,则必须将父窗口设置为子窗口对话框。例如:

Public Declare Function SetForegroundWindow _
Lib "user32" (ByVal hwnd As Long) As Long

Public Sub Bring_to_front()
    Dim setFocus As Long

    ThisWorkbook.Worksheets("Sheet1").Activate
    setfocus = SetForegroundWindow(Application.hwnd)
End Sub
在您的情况下,它将是一个对话框窗口:

Private Declare Function FindWindowA Lib "user32" (ByVal class As String, ByVal caption As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal win As Long) As Long

Dim hxl As Long

Set objExcel = New Excel.Application
Set fd = xl.FileDialog(msoFileDialogFilePicker)
hxl = FindWindowA("XLMAIN", "Excel")
If (hxl <> 0) Then
    res = SetForegroundWindow(hxl)
End If
With fd
.Filters.Clear
 .InitialFileName = SigFolder2
 .AllowMultiSelect = False
 .Title = "Select Signature File"
End With
res = fd.Show
Private声明函数FindWindowA Lib“user32”(ByVal类作为字符串,ByVal标题作为字符串)的长度
私有声明函数SetForegroundWindow Lib“user32”(ByVal win作为Long)作为Long
尺寸hxl与长度相同
Set objExcel=New Excel.Application
设置fd=xl.FileDialog(msoFileDialogFilePicker)
hxl=FindWindowA(“XLMAIN”、“Excel”)
如果(hxl 0)那么
res=SetForegroundWindow(hxl)
如果结束
有fd
.过滤器
.InitialFileName=SigFolder2
.AllowMultiSelect=False
.Title=“选择签名文件”
以
res=fd.Show