Страницы: 1
RSS
LoadPicture() - как загрузить изображение без блокировки файла., LoadPicture() как освободить файл.
 
При загрузке изображения из файла в Image1, файл блокируется, а нужно чтоб не блокировался.
Код
Image1.Picture = LoadPicture(FileName)

Есть похожая тема, но у меня не срабатывает.
 
Shapes.AddPicture ,,,
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Доброе время суток.
Возможно это от версии Excel и версии OLE Automation зависит. Excel 365 64bit, Excel 2016 32 bit - не воспроизводится.
Код
Private Sub CommandButton1_Click()
    Set Image1.Picture = LoadPicture("C:\Temp\icons\standard_icons_web_32_16.jpg")
End Sub
 
Ігор Гончаренко, нужно через image (используется на форме).
Андрей VG, Да действительно не блокируется, однако выяснилось что дело вовсе не в
Код
 LoadPicture()
а в
Код
Application.GetOpenFilename.

Он блокировал не файл, а папку, а мне как раз нужно было переименование папки где был файл.
Решение было взято  
Код
ChDir "D:\"
после выбора в диалоге.
Код
Private Sub UserForm_Initialize()
    X = Application.GetOpenFilename _
        ("Image files(*.jpg*),*.jpg*", 1, "Выбрать файл", , False)
    If TypeName(X) = "Boolean" Then
        MsgBox "Файл не выбран!"
        Exit Sub
    End If
      'X = Application.FileDialog(msoFileDialogFilePicker).Show 'Выводит диалоговое окно
    ' Если нажата кнопка отмена возвращается значение x = 0.. если выбран, то x=-1
    'If X = -1 Then
     '   Y = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) ' Возвращает выбранный путь к файлу (если включен мультиселект то .SelectedItems.Count - количество выбранных файлов, для каждого свой индекс начиная с единицы)
        'MsgBox y
    'End If
    ChDir "D:\"
    Image1.Picture = LoadPicture(X)
    'Image1.Picture = LoadPicture("")
    'Image1.Picture = LoadPicture(vbNullString)
    ImageNameBf = X
    'Image1.Picture = Nothing
    
End Sub

Возможно не самое лучшее решение, готов увидеть и другие варианты.
Ну наверно напрашивается использование других диалогов, но не знаю если они тоже не блокируют (
Код
Application.FileDialog()
тоже блокирует).

Модераторам, тему по сути нужно изменить на
Application.GetOpenFilename  и Application.FileDialog() блокирует папку после выбора файла.
Изменено: skais675 - 21.02.2021 10:50:02
 
Не вижу блокировки при переименовании выбранной папки для Application.FileDialog.
Код
Sub test()
  Dim fDialog As FileDialog, folder As Object, fso As Object, fName As String
  Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
  With fDialog
    If .Show = 0 Then Exit Sub
    fName = .SelectedItems(1)
  End With
  
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set folder = fso.getFolder(fName)
  folder.Name = "Folder_New"
  
  Set folder = Nothing
  Set fso = Nothing
End Sub
Владимир
 
sokol92, Речь шла о выборе файла в папке, а не выборе самой папки. При выборе файла, он блокирует папку. Прикладываю простой пример.
Изменено: skais675 - 21.02.2021 19:09:26
 
Понятно. Директория по умолчанию (default directory or folder) всегда блокируется от удаления и переименования. Это не связано с особенностями объекта FileDialog (который "виноват" лишь в смене текущей директории).

То же произойдет, если Вы выполните Chdir (как в #4) и попытаетесь переименовать вновь установленную директорию по умолчанию.
Владимир
Страницы: 1
Наверх