[[20210729091339]] 『FileDialog initialview 変わらない』(tkit) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『FileDialog initialview 変わらない』(tkit)

FileDialogでinitialviewを設定しても、表示が元々Win上で設定している状態から変わりませんでした。

ネット検索しても、無視された、という内容が1件見つかったくらいで、詳しい内容を探せませんでした。

何かご存知の方がいらっしゃいましたら、情報をお願いいたします。

    Sub DialogTest()
        With Application.FileDialog(msoFileDialogFilePicker)
            With .Filters
                .Clear
                .Add "画像データ", "*.jpg"
            End With
            .InitialFileName = "D:\"
            .AllowMultiSelect = False
            .InitialView = msoFileDialogViewPreview
            If .Show = -1 Then Debug.Print .SelectedItems(1)
        End With
    End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 Excel2007の頃から、OSとExcelのバージョンによって無視されるプロパティの様ですね。

FileDialog InitialView Property doesn't work ! | MrExcel Message Board
https://www.mrexcel.com/board/threads/filedialog-initialview-property-doesnt-work.1099626/

 ↑とかでもAPIでフックしてプロパティをセットして.. みたいな、
 かなり面倒な事をやってるっぽいです。

(白茶) 2021/07/29(木) 11:53


白茶さん、ありがとうございます。

スキャンした画像をExcelシートに貼り付け、最終的にpdfにする業務を自動化しておりまして。
基本的に選択しないような手順にしていますが、どうしても、画像選択をせざるを得ない場合、
出来るだけ、どのファイルか見やすくするため、自動で表示したかった、という状態でした。

紹介いただいたサイトを確認しましたが・・・

まず、無視される事があり得ることをご教示いただけただけで助かりました。

自身で表示変更してもらうようにしてもらいます。
ありがとうございました。
(tkit) 2021/07/29(木) 12:49


かなり異なりますが、用途とは合致するかも。

UserFormにWebBrowser1とCommandButton1を配置して
プレビューではなく、アイコンサイズを大きく表示の例です。

アイコン以外の表示項目はレジストリによるようです。

 Private Sub CommandButton1_Click()
    Dim xx As Object
    With Me.WebBrowser1
        Set xx = .Document.focuseditem
        If Not xx Is Nothing Then
            MsgBox xx.Name
        End If
    End With
    Unload Me
 End Sub

 Private Sub UserForm_Initialize()
    Const FWF_NOSUBFOLDERS = &H80   'Folderflags: Do not show subfolders

    Dim strFol  As String           'Target Folder
    Dim bstrFilterText As String     'FileFilter 演算子は大文字のこと
'    bstrFilterText = "*.jpg OR *.pdf"
    bstrFilterText = "NOT *.ico 分類:=ピクチャ"     'アイコンを除く画像ファイル

    strFol = CreateObject("WScript.Shell").specialfolders("MyDocuments")

    With Me.WebBrowser1
        .Navigate (strFol)
        .Document.FOLDERFLAGS = FWF_NOSUBFOLDERS
        .Document.FilterView bstrFilterText
        .Document.CurrentViewMode = 4   'FVM_DETAILS:Object names and other selected information
        .Document.IconSize = 128    'default:=16
    End With

 End Sub

(kazuo) 2021/07/29(木) 18:45


 kazuoさん、ありがとうございます。
 求めていた過程と結果が得られそうです。

 WebBrowser を使うのは初めてでして、ご教示いただいたコードから、フィットした
 表示を探したく、調べました。
 ・Documentのプロパティをネット検索したがヒットせず。
 ・インテリセンス表示すれば、何とかなるかなと、Documentの型をTypenameで調べ、HTMLDocumentが返った。
 ・上記型の変数に入れたが、インテリセンスにご教示いただいたプロパティは無い。

 恐らく、参照していないライブラリがあると思っているのですが、
 ご教示いただけますと助かります。

 また、参考になりそうなサイトがありましたら、ご紹介いただきたく。
 以上、よろしくお願いいたします。

(tkit) 2021/07/30(金) 11:04


いろいろ触っていて、jpgでのDocumentの型でした。
IShellFolderViewDual が拾えましたので、
そこから調べてみます。
(tkit) 2021/07/30(金) 11:46

すみません。用途とは合っていませんでした。

正確な名称は知りませんが、本品は(ファイル)ピッカーではなくエクスプローラーですので、
ダブルクリックするとファイルが開いてしまいますし、右クリックコマンドなども有効です。
個人では使えるかも知れませんが他の方に使っていただくとトラブル発生するかもしれません。

(kazuo) 2021/07/30(金) 21:32


 他にUserForm使って自分で頑張る的な方法だと、
 お手軽なのは↓こんな感じのでしょうか...

    Option Explicit
    Private WithEvents List1 As MSForms.ListBox
    Private WithEvents Btn1 As MSForms.CommandButton
    Private WithEvents Img1 As MSForms.Image
    Private myPath As String
    Private Property Get FolderPath() As String
        FolderPath = myPath
    End Property
    Private Property Let FolderPath(newPath As String)
        If myPath = newPath Then Exit Property
        myPath = newPath
        List1.Clear
        Dim s As String
        s = Dir(myPath & "*.jpg")
        Do Until s = ""
            List1.AddItem s
            s = Dir()
        Loop
    End Property
    Private Sub Btn1_Click()
        Dim s As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = myPath
            If .Show = -1 Then s = .SelectedItems(1) & "\"
        End With
        If Len(s) Then FolderPath = s
    End Sub
    Private Sub List1_Change()
        Dim s As String
        If Len(List1.Text) = 0 Then
            Img1.Picture = LoadPicture()
        Else
            s = myPath & List1.Text
            Img1.Picture = LoadPicture(s)
        End If
    End Sub
    Private Sub UserForm_Initialize()
        Set List1 = Me.Controls.Add("Forms.ListBox.1", "List1")
        With List1
            .Top = 6!: .Left = 6!
            .Height = 144!: .Width = 111!
        End With
        Set Btn1 = Me.Controls.Add("Forms.CommandButton.1", "Btn1")
        With Btn1
            .Top = 6!: .Left = 132!
            .Height = 24!: .Width = 72!
            .caption = "フォルダ選択(O)"
            .Accelerator = "O"
        End With
        Set Img1 = Me.Controls.Add("Forms.Image.1", "Img1")
        With Img1
            .Top = 36!: .Left = 132!
            .Height = 72!: .Width = 96!
            .PictureSizeMode = fmPictureSizeModeZoom
        End With
        myPath = "D:\"
    End Sub

(白茶) 2021/07/30(金) 22:35


 >すみません。用途とは合っていませんでした。〜
 (kazuo) 2021/07/30(金) 21:32

 ありがとうございます。
 MS公式からIShellFolderViewDualのプロパティの詳細が拾え、各プロパティでの表示確認は出来ました。
 kazuoさんの仰る通り、ダブルクリック、右クリックが効きますね。
 WebBrowserに上記イベントが用意されていないので、簡単にキャンセル出来ない事は確認出来ました。
 開く事や右クリックメニューが出ることは、今回は問題ないですが、Windowsセキュリティから警告が
 出るのが厄介ですね。

 >他にUserForm使って自分で頑張る的な方法だと、 お手軽なのは↓こんな感じのでしょうか...
 (白茶) 2021/07/30(金) 22:35

 コード教示いただき、ありがとうございます。
 WebBrowserのUserFormと拡大表示用でImageのUserFormで作成しようと考えていました。

 お付き合いいただいて、大変ありがたく、自身の糧になりました。
 本ツールの使用者のPCスキルもそれなりなので、当初通り、
 Application.FileDialog(msoFileDialogFilePicker)で
 対応しようと考えています。
 jpgファイルが何かはっきりしたければ、右クリ→開くで確認でも十分な気がしております。

(tkit) 2021/08/02(月) 09:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.