Возникли проблемы с представлением.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