filedialog

sdku
Дата: 21.11.2015 11:48:03
Уважаемые форумчане!
Возможно-ли при открытии диалога средствами VBA убрать панель предварительного просмотра (т.к её наличие при открытии файла двойным щелчком вызывает ошибку в программе открывающей файл. А-2007)
guest_rusimport
Дата: 21.11.2015 21:51:56
sdku,
а за это , случайно, не свойство ли InitialView отвечает?
 With Application.FileDialog(msoFileDialogFilePicker)
   .InitialView = msoFileDialogViewList
   .Show
 End With
guest_rusimport
Дата: 22.11.2015 01:08:34
sdku,
2007-го нет, поэтому, наверное, не понял про какую панель идёт речь
sdku
Дата: 22.11.2015 11:13:47
guest_rusimport,
Свойство о котором Вы говорите определяет вид-список или таблица.
Короче бросаю эту затею. Огромное спасибо за отклик
sdku
Дата: 22.11.2015 11:16:02
Точно не помню, по-моему, в 2003 офисе этой кнопки вообще нет (и нет проблем)
guest_rusimport
Дата: 22.11.2015 11:48:12
sdku
guest_rusimport,
Свойство о котором Вы говорите определяет вид-список или таблица.
Короче бросаю эту затею. Огромное спасибо за отклик


В 2003-м то, о чем вы говорите, тоже есть, но выглядит по другому, и за предварительный просмотр отвечает как раз
.InitialView = msoFileDialogViewPreview (ниже прилагаю скрин)
Проверил в 2003-м такой код (никаких ошибок при двойном клике мышкой на файле не обнаружил :( )
Option Compare Database

Option Explicit
 Private Declare Function SHGetFolderPath Lib "shell32" _
     Alias "SHGetFolderPathA" _
     (ByVal hwndOwner As Long, ByVal nFolder As Long, _
     ByVal hToken As Long, ByVal dwFlags As Long, _
     ByVal pszPath As String) As Long

 Private Declare Function GetTempPath Lib "kernel32" _
     Alias "GetTempPathA" _
     (ByVal nBufferLength As Long, _
     ByVal lpBuffer As String) As Long

 'More Commonly used CSIDL values.
 'For the full list, search MSDN for "CSIDL Values"
 Private Const CSIDL_PROGRAMS As Long = &H2
 Private Const CSIDL_PERSONAL As Long = &H5
 Private Const CSIDL_FAVORITES As Long = &H6
 Private Const CSIDL_STARTMENU As Long = &HB
 Private Const CSIDL_MYDOCUMENTS As Long = &HC
 Private Const CSIDL_MYMUSIC As Long = &HD
 Private Const CSIDL_MYVIDEO As Long = &HE
 Private Const CSIDL_DESKTOPDIRECTORY As Long = &H10
 Private Const CSIDL_APPDATA As Long = &H1A
 Private Const CSIDL_LOCAL_APPDATA As Long = &H1C
 Private Const CSIDL_INTERNET_CACHE As Long = &H20
 Private Const CSIDL_WINDOWS As Long = &H24
 Private Const CSIDL_SYSTEM As Long = &H25
 Private Const CSIDL_PROGRAM_FILES As Long = &H26
 Private Const CSIDL_MYPICTURES As Long = &H27

 'Constants used in the SHGetFolderPath call
 Private Const CSIDL_FLAG_CREATE As Long = &H8000&
 Private Const SHGFP_TYPE_CURRENT = 0
 Private Const SHGFP_TYPE_DEFAULT = 1
 Private Const MAX_PATH = 260

 'Public enumeration to give friendly names for the CSIDL values
 Public Enum SpecialFolderIDs
  sfAppDataRoaming = CSIDL_APPDATA
  sfAppDataNonRoaming = CSIDL_LOCAL_APPDATA
  sfStartMenu = CSIDL_STARTMENU
  sfStartMenuPrograms = CSIDL_PROGRAMS
  sfMyDocuments = CSIDL_PERSONAL
  sfMyMusic = CSIDL_MYMUSIC
  sfMyPictures = CSIDL_MYPICTURES
  sfMyVideo = CSIDL_MYVIDEO
  sfFavorites = CSIDL_FAVORITES
  sfDesktopDir = CSIDL_DESKTOPDIRECTORY
  sfInternetCache = CSIDL_INTERNET_CACHE
  sfWindows = CSIDL_WINDOWS
  sfWindowsSystem = CSIDL_SYSTEM
  sfProgramFiles = CSIDL_PROGRAM_FILES
  
  'There is no CSIDL for the temp path,
  'so we need to give it a dummy value
  'and treat it differently in the function
  sfTemporary = &HFF
 End Enum

 'Get the path for a Windows special folder
 Public Function SpecialFolderPath( _
     ByVal uFolderID As SpecialFolderIDs) As String

  'Create a buffer of the correct size
  Dim sBuffer As String * MAX_PATH
  Dim lResult As Long
  
  If uFolderID = sfTemporary Then
   'Use GetTempPath for the temporary path
   lResult = GetTempPath(MAX_PATH, sBuffer)
   
   'The GetTempPath call returns the length and a
   'trailing \ which we remove for consistency
   SpecialFolderPath = Left$(sBuffer, lResult - 1)
  Else
   'Call the function, passing the buffer
   lResult = SHGetFolderPath(0, _
        uFolderID + CSIDL_FLAG_CREATE, 0, _
        SHGFP_TYPE_CURRENT, sBuffer)
  
   'The SHGetFolderPath function doesn't give us a
   'length, so look for the first vbNullChar
   SpecialFolderPath = Left$(sBuffer, _
             InStr(sBuffer, vbNullChar) - 1)
  End If
   
 End Function

 Sub TestFileDialog()
 Dim sf As String
 Dim p As String
 sf = SpecialFolderPath(sfMyDocuments)

 With Application.FileDialog(msoFileDialogFilePicker)
   .InitialFileName = sf
   .InitialView = msoFileDialogViewPreview
   .Show
   p = .SelectedItems(1)
   Application.FollowHyperlink p
 End With
     
 End Sub