2015-08-27 3 views
0

Я использую VBA в PowerPoint для обновления ссылок на объекты Excel в своей PowerPoint, и все работает хорошо. Единственная проблема, с которой я сталкиваюсь, заключается в том, что иногда диалоговое окно «Выбрать файл» открывается за активной PowerPoint, и единственный способ выбрать его - CTRL + ALT + Del и выбрать «Выбор файла Excel» и установить его как активный. Есть ли способ сделать это всегда активным диалоговым окном при его открытии? Вот код, я использую:GetOpenFilename открывает диалоговое окно за презентацией PowerPoint

Sub UpdateLinks() 
Dim sld As Slide 
Dim sh As Shape 
Dim strNms As String 
Dim intI As Integer 
Dim strNewPath 
Dim ExcelFile 
Dim exl As Object 
Set exl = CreateObject("Excel.Application") 
'Set exl = exl.ActiveWindow 
'exl.Active = True 
'Open a dialog box to promt for the new source file. 
ExcelFile = exl.Application.GetOpenFilename(, , "Select Excel File") 
'Go through every slide 
For Each sld In ActivePresentation.Slides 
    For Each sh In sld.Shapes 
     If sh.Type = msoLinkedOLEObject Then 
      With sh.LinkFormat 
       strNms = .SourceFullName 
       intI = InStr(1, strNms, "!") 
       strNewPath = ExcelFile & Mid(strNms, intI, Len(strNms) - intI + 1) 
       .SourceFullName = strNewPath 
      End With 
     End If 
    Next sh 
Next sld 
ActivePresentation.UpdateLinks 

End Sub

Спасибо.

+0

Предполагая, что вы работаете в этом изнутри РРТ, есть какая-то причина, почему вы не вызывая диалог выбора файла в PPT приложения вместо того, чтобы делать это через Excel? –

+0

Я предполагаю, что единственная причина в том, что это часть кода, которую кто-то еще опубликовал для обновления msoLinkedOLEObjects. Я не уверен, как это сделать с помощью выбора файла PPT. –

+0

Попробуйте сделать приложение Excel видимым перед вызовом метода GetOpenFilename. –

ответ

0

Предложение: попробуйте эту версию файла подборщика вместо:

Sub FileDialogExample() 
' Courtesy of John Wilson 
' www.pptalchemy.co.uk 

    Dim fd As FileDialog 
    Dim sFilename As String 

    Set fd = Application.FileDialog(msoFileDialogFilePicker) 

    With fd 
     .Filters.Clear 
     .Filters.Add "Excel Files", "*.xls *.xlsx" 
     .InitialFileName = Environ("USERPROFILE") & "\Desktop\" 
     .AllowMultiSelect = False 
     If .Show = True Then sFilename = .SelectedItems(1) 
    End With 
    'do whatever with sFilename 
    MsgBox "You picked " & sFilename 

End Sub 
Смежные вопросы