Excel-VBA: добавление Folder-Explorer к рабочему листу - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу встроить окно обозревателя в мою рабочую таблицу Excel, чтобы отобразить содержимое некоторых папок, относящихся к моей книге.

Я использую следующий код, который работает тихо:

Sub AddOleBrowser()
    Dim OleBrowser As OleObject
    Dim Browser As Object

    Set OleBrowser = ActiveSheet.OLEObjects.Add(ClassType:="Shell.Explorer.1", Link:=False, DisplayAsIcon:=False)
    Set Browser = OleBrowser.Object
    Browser.Navigate "X:\" 'Actually some network-path related to my workbook-path

    OleBrowser.Activate
End Sub

Моя проблема в том, что OleBrowser продолжает заменяться изображением в низком разрешении, отображая вместо этого содержимое папки всякий раз, когда я щелкаю где-нибудь на своем листе.Когда я дважды щелкаю по нему, он возвращается к обычному виду браузера, пока снова не потеряет фокус.Я хочу добавить несколько окон браузера на свой рабочий лист, чтобы они все оставались «активированными».

Я также попытался добавить фрейм, который затем содержит объект просмотра:

Sub AddOleFrameWithBrowser()
    Dim OleFrame As OleObject
    Dim CtrlBrowser As Control
    Dim Browser As Object
    Set OleFrame = ActiveSheet.OLEObjects.Add("Forms.Frame.1", Link:=False, DisplayAsIcon:=False)
    Set CtrlBrowser = OleFrame.Object.Controls.Add("Shell.Explorer.2", "Browser") 'Frame1 is an MSForms.Frame-object that I placed there before.

    CtrlBrowser.Left = 0
    CtrlBrowser.Top = 0
    CtrlBrowser.Width = OleFrame.InsideWidth
    CtrlBrowser.Height = OleFrame.InsideHeight

    Set Browser = CtrlBrowser.Object
    Browser.Navigate "X:\" 'Actually some network-path related to my workbook-path

    OleFrame.Activate
End Sub

Второй вариант работает нормально, но когда я переключаюсь на другой лист и возвращаюсь, мой фрейм пуст и я не могу получить действительную ссылку на свой элемент управления «Браузер».

Sub CheckFrame()
    '
    Dim CheckBrowser As Object
    Set CheckBrowser = ActiveSheet.OleObjects(1).Object.Controls("Browser").Object
    Stop
    'CheckBrowser now actually contains the correct WebBrowser-object,
    'but when I run this sub (after I return to my Worksheet
    'with the Frame-OleObject) all it's properties either
    'contain falsified data or may not be accessed by the debugger...
    'Everything is fine, when I run this sub right after
    'my AddOleFrameWithBrowser()-Sub.
    ActiveSheet.OleObjects(1).Activate '<- Does not help
End Sub

Дополнительно всякий раз, когда я пытаюсьсделайте что-нибудь с папками-элементами внутри моего встроенного проводника, он отображает некоторое предупреждение безопасности, потому что путь не на моей локальной машине.Это предупреждение не появляется, когда я добавляю Shell.Explorer-OleObject напрямую с помощью AddOleBrowser ().

Может кто-нибудь дать мне какой-нибудь совет?

...