Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 11:16   #11
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Возможно ли указать все расширения графики и как это сделать?
Возможно, но есть способ проще и эффективнее - пытаться вставить на лист изображения из ВСЕХ найденных файлов. В случае, если при загрузке изображения из файла возникает ошибка (если файл не является картинкой), просто пропускать такой файл.
Если надо - адаптирую код под такой вариант.
EducatedFool на форуме Ответить с цитированием
Старый 21.09.2009, 11:43   #12
elf80
Пользователь
 
Регистрация: 09.08.2009
Сообщений: 33
По умолчанию

Буду благодарен за доработку!!!
elf80 вне форума Ответить с цитированием
Старый 21.09.2009, 15:54   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Теперь макрос собирает ВСЕ графические файлы в текущей папке, и во всех подпапках:




Вот весь код:
Код:
Option Compare Text
Public FileNames As Collection

Sub Main()
    On Error Resume Next
    ' оставьте одну из следующих двух строк:
    ПутьКПапкеСКартинками = "C:\Documents and Settings\Игорь\Рабочий стол\тест"    ' конкретная папка
    ПутьКПапкеСКартинками = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")    ' там же, где и этот файл

    Application.ScreenUpdating = False: msg = "": Application.DisplayAlerts = False
    Dim sh As Worksheet: Set sh = ActiveSheet
    Очистка    ' очистка всех ячеек листа от прежнего содержимого
    Set FileNames = New Collection: On Error Resume Next
    Call ReadFileNames(ПутьКПапкеСКартинками)    ' поиск подходящих файлов во всех подпапках

    Dim cell As Range, ra As Range: Application.ScreenUpdating = False

    For Each file In FileNames
        Set cell = Range("b" & Rows.Count).End(xlUp).Offset(1)
        If ВставитьКартинку(cell.Previous, file) Then cell = Dir(file)
    Next
    Application.ScreenUpdating = True
End Sub

Sub Очистка()
    Dim sha As Shape: Application.ScreenUpdating = False
    For Each sha In ActiveSheet.Shapes
        If sha.Type = msoPicture Then sha.Delete
    Next
    [2:1000].ClearContents
    ActiveSheet.UsedRange.EntireRow.AutoFit
End Sub

Function ВставитьКартинку(ByRef cell As Range, ByVal Pic As String) As Boolean
    ' если картинка вставлена успешно, возвращает TRUE
    On Error Resume Next: Err.Clear
    Dim ph As Picture: Set ph = cell.Parent.Pictures.Insert(Pic)
    ВставитьКартинку = Err.Number = 0
    ph.Top = cell.Top: ph.Left = cell.Left: k = ph.Width / ph.Height
    ph.Width = cell.Width: ph.Height = ph.Width / k
    cell.EntireRow.RowHeight = ph.Height
End Function

Function ReadFileNames(ByVal FolderPath As String)
    Set fso = CreateObject("scripting.filesystemobject")
    Set curfold = fso.GetFolder(FolderPath)

    If Not curfold Is Nothing Then
        For Each fil In curfold.Files
            FileNames.Add fil.Path
        Next
        For Each sfol In curfold.SubFolders
            ReadFileNames sfol.Path
        Next
        Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing:
    End If
End Function
EducatedFool на форуме Ответить с цитированием
Старый 21.09.2009, 16:37   #14
elf80
Пользователь
 
Регистрация: 09.08.2009
Сообщений: 33
По умолчанию

Большое СПАСИБО!!!
elf80 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу получить адрес найденой ячейки в Exel R_Z Microsoft Office Excel 5 13.09.2009 22:06
вопрос О копировании значения в Exel 2007 vist17 Microsoft Office Excel 1 07.07.2009 19:21
Помогите пожалуйста решить задачу в Exel yura16 Помощь студентам 1 03.06.2009 14:31
Не могу создать массив. хелп, плз. SarahConner Помощь студентам 5 08.01.2009 22:07
один вопрос по Memo Andr Общие вопросы Delphi 2 11.05.2007 17:58