Возникли проблемы с представлением.InitialFileName с командой FileDialog

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

Вот что у меня есть

strFolder = InitDir
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)

With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .ButtonName = "Select"
    .InitialView = msoFileDialogViewList
    .InitialFileName = "C:\Users\Daniel\My Pictures\" 'using to test code

    If Right(strName, 1) <> "\" Then
        strFolder = strFolder & "\"
    End If
    If .Show <> -1 Then
        Exit Sub
    Else
        strFolder = .SelectedItems(1) & "\"
    End If
End With

Если я исключаю "\" после "Мои рисунки", все папки в моей пользовательской папке "Daniel" отображаются в начальном представлении с изначально выбранными "Моими рисунками", но когда я добавляю "\" после того, что я предполагаю это "FileDialogViewList" просто обнаруживается. Как я могу получить папку "Мои рисунки" для первоначального запуска.

4 ответа

Решение

Переданное вами исходное имя_файла неверно, поэтому оно отображает "Мои документы" в качестве начальной папки. Так как в случае неправильного каталога по умолчанию "имя_файла" отображается. Попробуйте следующий путь: C:\Documents and Settings\Daniel\ Мои документы \ Мои рисунки \

У меня была похожая проблема, и во время отладки заметил, что в случае, когда путь к файлу или папке совпадает с тем, который задан для объекта диалогового окна файла в момент инициализации этого объекта, исходное имя файла устанавливается не таким, которое Вы хотите, но в пользовательскую папку Documents. Для преодоления этой проблемы мне помог фрагмент кода:

If Not fDialog.InitialFileName = filePath Then
    fDialog.InitialFileName = filePath
End If

Теперь я вижу, что забыл проверить, заканчивается ли предустановленный путь, хранящийся в sFolder, на «\». Я полностью упустил это из виду, что объяснило «странное» поведение.

Если вы поместите эту строку над FileDialog, тогда все работает нормально, и нет необходимости в уродливых sendkeys "Solution"... :-)

      If Right(sFolder, 1) <> Application.PathSeparator Then sFolder = sFolder & Application.PathSeparators

Полный код (который работал у меня):

      If Right(sFolder, 1) <> Application.PathSeparator Then sFolder = sFolder & Application.PathSeparators

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a folder"
    .AllowMultiSelect = False
    .ButtonName = "Select"
    .InitialView = msoFileDialogViewList
    If Not .InitialFileName = sFolder Then
        .InitialFileName = sFolder
    End If
    If .Show = -1 Then ' OK was pressed
        sFolder = .SelectedItems(1) & "\"
    Else
        Exit Sub 'Cancel presssed, user wants to Quit.
    End If
End With

Я заметил, что предустановленный путь к файлу каким-то образом был выбран, что означает, что текст был СИНИМ... Для меня это было решением:

      ' delete the selected text entry! 
SendKeys ("{Delete}") 

Полный код (который работал у меня):

      With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a folder"
    .AllowMultiSelect = False
    .ButtonName = "Select"
    .InitialView = msoFileDialogViewList
    If Not .InitialFileName = sFolder Then
        .InitialFileName = sFolder
    End If

    ' Apperently you need Sendkeys to delete the text entry...
    SendKeys ("{Delete}")

    If .Show = -1 Then ' OK was pressed
        sFolder = .SelectedItems(1) & "\"
    Else
        Exit Sub 'Cancel presssed, user wants to Quit.
    End If
End With
Другие вопросы по тегам