Скопируйте/вставьте путь к файлу в уже открытом диалоговом окне файла (сторонняя сторона) с помощью VBA

Мой родной язык не английский, и я относительно новичок в VBA, поэтому заранее прошу прощения. Моя проблема заключается в следующем: часть моего кода VBA пытается скопировать и вставить путь к файлу из буфера обмена, который ранее был определен в строковой переменной. У меня есть решение, но оно заключается в использовании Sendkeys — я не совсем доволен этим решением, даже если оно работает.

Есть ли альтернативный способ Sendkeys? Например, чтобы найти и активировать диалоговое окно уже открытого файла, в частности, поле ввода внутри, и установить строковую переменную непосредственно в это поле? (надеюсь, приложенная картинка проясняет то, что я себе представляю)

Снимок экрана


person animory piano    schedule 08.08.2020    source источник


Ответы (1)


посмотрите, может ли следующий код VB с использованием Powershell помочь вам.

Sub OpenFileUsingPowershell()
 
Dim Powershell_Command, Your_Code As Variant
Dim File_Path, File_Path_with_Spaces As String

File_Path_with_Spaces = "D:\Test Path\Test File.xlsx"    'use file path you have copied from clipboard

File_Path = Replace(File_Path_with_Spaces, " ", Chr(39) & " " & Chr(39))

Your_Code = "Add-Type -AssemblyName System.Windows.Forms ; $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{" & Chr(13) & _
"InitialDirectory = [Environment]::GetFolderPath('Desktop')" & Chr(13) & _
"Filter = 'SpreadSheet (*.xlsx)|*.xlsx'" & Chr(13) & _
"FileName=" & File_Path & "}" & Chr(13) & "$null = $FileBrowser.ShowDialog()"

Powershell_Command = Shell("POWERSHELL.exe " & Your_Code, 0)   'See Note below.


End Sub

Примечание. В приведенном выше коде попробуйте использовать Powershell_Command = Shell("POWERSHELL.exe -noexit " & Code, 1) вместо Powershell_Command = Shell("POWERSHELL.exe " & Your_Code, 0), просто чтобы посмотреть, что происходит!

person Puntal    schedule 10.08.2020
comment
Спасибо за ответ. Будет ли это решение также работать, если диалоговое окно открытия файла будет открыто citrix? Тем временем я также обнаружил, что моя первоначальная мысль об альтернативе существует (например, с использованием spy++). Но, хотя это работало в обычных окнах, оно не работало с окнами, связанными с Citrix. - person animory piano; 12.08.2020
comment
Привет, извините, я не совсем осведомлен о среде Citrix; код, который я разместил, предназначен для обычной Windows. Однако попросите вас добавить свой код в свой вопрос с комментариями везде, где, по вашему мнению, есть исключения (например, упомянутый вами Citrix), чтобы кто-то еще, обладающий необходимыми ноу-хау, мог вам помочь. - person Puntal; 12.08.2020