Страницы: 1
RSS
Макрос вставки OLE объектов
 
Добры день, уважаемые пользователи!

Как абсолютный "0" в VBA взываю к вашей помощи.
Передо мной стоит задача оптимизировать файл Excel для сбора информации и для дальнейшей отправки по электронной почте.
С простыми функциями я разобрался вроде, но есть еще много разных задач и первая из них:

Нужно, что бы при нажатии кнопки появлялось диалоговое окно для выбора файла и далее этот файл должен быть внедрен в ячейку. Он должен быть в виде значка с именем исходного файла. Файл должен быть любым (картинка, звук, документ ворд, эксель или pdf)
То что есть сейчас, работает очень коряво и только для pdf. сделал через запись макросов.

Заранее спасибо!
 
Что-то типа этого?
Код
Sub Макрос()
    FName = Application.GetOpenFilename(Title:="Выбирете файл для вставки в документ")
    ActiveSheet.OLEObjects.Add Filename:=FName, Link:=False
End Sub
Изменено: Sanja - 13.10.2015 13:38:20
Согласие есть продукт при полном непротивлении сторон
 
Спасибо, но не до конца работает.
Если нажать отмену, вылетает ошибка 1004 (вставка объекта неосуществима).
И для отображения иконкой добавил код. Но все равно не отображается имя файла.  
Код
   Sub
 FName = Application.GetOpenFilename 
    ActiveSheet.OLEObjects.Add Filename:=FName, Link:=False, DisplayAsIcon:=True
  Range("C8").Select
End Sub

что то нужно добавить...
 
Цитата
Mercenary написал: Если нажать отмену, вылетает ошибка 1004
Так надо как-то просвещаться: Диалоговое окно выбора файлов/папки

Цитата
Mercenary написал: И для отображения иконкой
Цитата
Но все равно не отображается имя файла.
Что-то непонятно. Код добавили для отображения иконкой, а отображаться должно имя файла...Что надо, куда и как?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Огромное спасибо!
но все равно я туплю...
Мне нужно чтобы в ячейку C8 вставлялся файл любого типа и отображался как иконка с названием исходного (проще говоря, как этот файл на рабочем столе  выглядит).
ничего у меня не выходит(( вот что в последнем варианте:
Код
Sub Макрос()
Range(C8).Select
    FName = Application.GetOpenFilename(Title:=""All files(*.*),*.*")
    ActiveSheet.OLEObjects.Add Filename:=FName, Link:=False, DisplayAsIcon:= True, IconLabel:=FName
ActiveSheet.Select
End Sub

И при нажатии Отмена все равно вылетает ошибка 1004
что не так?
 
Mercenary, для оформления кода в сообщении - кнопка <...>
 
Цитата
Mercenary написал:
И при нажатии Отмена все равно вылетает ошибка 1004
А что-то в приведенном коде нет обработки нажатия Отмена. В то время как в статье, на которую я дал ссылку в каждом коде есть обработка нажатия Отмены. Мало того - строки этой обработки помечены комментариями.
Код
    Dim avFiles
    avFiles = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
    If VarType(avFiles) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
    ActiveSheet.OLEObjects.Add Filename:=avFiles, Link:=False, DisplayAsIcon:=True, IconLabel:=avFiles
    ActiveSheet.Select
Насколько знаю за сам тип значка отвечает IconFileName, а не IconLabel. И содержаться там должен путь до библиотеки значков. При вставке стандартными средствами Excel извлекает его из файлов своих библиотек.
Попробуйте записать макрорекордером вставку нужного типа файла и посмотрите на полученный код.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Все дело в том, что я неделю назад первый раз увидел макрос и мой уровень в этом ниже плинтуса. поэтому мне сложно разобраться. Все равно не выходит как нужно.
с кнопкой отмены разобрался. Спасибо.  Но вставляется документ все равно криво и не я в ячейку. Имя не отображается. я упускаю какие то детали....

Нужно как: Нужно, что бы макрос работал точно так же, как если я нажимаю: Вставка/Объект/из файла (в виде значка).
И вставляться он должен в ячейку "C8".  Макрорекодер не помогает. я уже миллион раз пробовал. Как в итоге должен выглядеть код?
 
Цитата
Mercenary написал:
Макрорекодер не помогает
Мы разные макрорекордеры, видимо, используем:
Код
Sub InsertOLE()
    Dim avFiles
    avFiles = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
    If VarType(avFiles) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
    Range("C8").Select
    ActiveSheet.OLEObjects.Add Filename:=avFiles, Link:=False, _
        DisplayAsIcon:=True, IconFileName:= _
        "C:\Windows\Installer\{90140000-0011-0000-1000-0000000FF1CE}\xlicons.exe", _
        IconIndex:=0, IconLabel:=avFiles
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Разобрался более менее) Спасибо! А про макрорекодеры, я использую встроенный в эксель)) есть другие?)) просто он не пишет нажатия на кнопки в верхней панели самого экселя..

Осталось неясно, как прописать значение искомой иконки для варианта с выбором "All Files". Если в код просто не прописывать IconFileName, то по каким то непонятным причинам, даже с условием DisplayAsIcon:=True фалы вставляются либо некорректно, либо в виде белого большого прямоугольника.
Private Sub CommandButton3_Click()
Код
Dim avFiles
    avFiles = Application.GetOpenFilename _
                ("All files(*.*),*.*", 1, "Выбрать файлы", , True)
    If VarType(avFiles) = vbBoolean Then
        
        Exit Sub
    End If
    Range("B37").Select
   
 ActiveSheet.OLEObjects.Add Filename:=avFiles, Link:=False, 
DisplayAsIcon:=True, IconFileName:="", IconIndex:=0, IconLabel:=avFiles

Range("B37").Value = Clear



End Sub

И вдогонку второй вопрос:
Как сделать так, что бы второй файл в эту же ячейку вставал справа от первого? а то при вставке нескольких файлов они накладываются один на другой.
Изменено: Mercenary - 14.10.2015 15:43:40
 
Если иконку брать неоткуда - как там может быть подпись вообще? :) Тут надо либо указывать все параметры для Icon, либо будут глюки.
Про вставку следующего - а как код должен понять это первая иконка или 10-я? И приложите пример кода, которым Вы несколько файлов вставляете.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код как раз в предыдущем сообщении. Значение true в конце строки ("All files(*.*),*.*", 1, "Выбрать файлы", , True) дает возможность вставлять несколько файлов одновременно. Это первый вариант. Второй - если я просто вставил один, потом нажал еще раз и вставил второй файл.
 
При первом варианте надо делать цикл по выбранным файлам и вставлять по очереди. Сдвигая параметр Left каждого на ширину предыдущего.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
может кто знает как вставить в таблицу картинку как в проводнике когда выбран вид папки огромные значки? , получится эдакая миниатюра.
 
Может, Вы ознакомились с правилами и знаете, что для отдельного вопроса нужно создавать отдельную тему?
Страницы: 1
Наверх