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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2010, 22:51   #1
EugeneDanceR
Новичок
Джуниор
 
Регистрация: 11.05.2010
Сообщений: 2
Стрелка Прокомментируйте пож работу программы?

Кто-нибудь может прокомментировать все команды в этой программе для вставки картинки в MS Office?Просто я вообще впервые вижу эту прогу,я программирую на С++,но в этом нужно разобраться,так что,всем слабо?
___________________________________ _____________________________
___________________________________ _____________________________

Sub Kartinki()
Dim oPicture As InlineShape
Dim sFileName As String, sFileNameShort As String
'********************************** *********************************** **************
With Application.FileDialog(msoFileDialo gOpen)
.AllowMultiSelect = False
.ButtonName = "Vstavit`": .InitialView = msoFileDialogViewPreview: .Title = "Vera,vyberi kartinku"
.Filters.Clear: .Filters.Add "Tol`ko kartinki (JPG,JPEG,bmp)", "*.jpg;*.jpeg;*.bmp": .Filters.Add "All Files", "*.*"
If .Show Then sFileName = .SelectedItems(1) Else Exit Sub
End With
sFileNameShort = CreateObject("Scripting.FileSystemO bject").GetFile(sFileName).ShortNam e
sFileNameShort = Mid(sFileNameShort, 1, InStrRev(sFileNameShort, ".") - 1)
Set oPicture = ActiveDocument.InlineShapes.AddPict ure(sFileName, False, True, Selection.Range)
oPicture.Select: Selection.InsertCaption "Risunok", " " & sFileNameShort
End Sub
EugeneDanceR вне форума Ответить с цитированием
Старый 12.05.2010, 07:01   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А оформить код тегами [CODE][/CODE] слабо?
Код:
Sub Kartinki()
  'Переменная для хранения картинки
  Dim oPicture As InlineShape 
  'Имя файла и короткое имя файла (видимо без расширения)
  Dim sFileName As String, sFileNameShort As String 
  '********************************** *********************************** **************
  'Диалог открытия файла, хотя лучше вместо msoFileDialogOpen использовать msoFileDialogFilePicker
  With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False 'Запрет выбора нескольких файлов
    'Название кнопки, завершающей выбор; вид окна (предварительный просмотр), заголовок окна
    .ButtonName = "Vstavit`": .InitialView = msoFileDialogViewPreview: .Title = "Vera,vyberi kartinku"
    'Расширения файлов
    .Filters.Clear: .Filters.Add "Tol`ko kartinki (JPG,JPEG,bmp)", "*.jpg;*.jpeg;*.bmp": .Filters.Add "All Files", "*.*"
    'Отображение окна диалого. Если он завершился положительно, то запоминаем выбранный файл, иначе - выход из процедуры
    If .Show Then sFileName = .SelectedItems(1) Else Exit Sub
  End With
  'Получаем имя файла без расширения. С помощью Scripting.FileSystemObject выделяем из пути только имя файла, _
  а затем отсекаем расширение
  sFileNameShort = CreateObject("Scripting.FileSystemObject").GetFile(sFileName).ShortName
  sFileNameShort = Mid(sFileNameShort, 1, InStrRev(sFileNameShort, ".") - 1)
  'В активный документ в местоположение курсора добавляем картинку
  Set oPicture = ActiveDocument.InlineShapes.AddPicture(sFileName, False, True, Selection.Range)
  'Выбираем картинку и вставляем для нее подпись.
  oPicture.Select: Selection.InsertCaption "Risunok", " " & sFileNameShort
End Sub
Вместо
Код:
  sFileNameShort = CreateObject("Scripting.FileSystemObject").GetFile(sFileName).ShortName
для выделения из пути только имени файла можно воспользоваться таким выражением:
Код:
sFileNameShort = Mid(sFileName, InStrRev(sFileName, "\") + 1)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 12.05.2010, 11:33   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Цитата:
Вместо
Код:
sFileNameShort = CreateObject("Scripting.FileSystemO bject").GetFile(sFileName).ShortNam e

для выделения из пути только имени файла можно воспользоваться таким выражением:
Код:
sFileNameShort = Mid(sFileName, InStrRev(sFileName, "\") + 1)
Только надо учитывать что это не эквивалентные конструкции в случае использования длинных имён. Первый вариант формирует именно короткое имя, соответствующее длинному. И в общем случае .ShortName <> .Name

Последний раз редактировалось Aent; 12.05.2010 в 11:37.
Aent вне форума Ответить с цитированием
Старый 12.05.2010, 22:08   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Понял, я неправильно трактовал функцию ShortName. Она возвращает DOS-овское имя. Никогда этим не пользовался. Интересно, зачем это нужно в Word?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 12.05.2010, 22:41   #5
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Только Shortname не функция а свойство (Property), применимое к объектам File или Folder.
Зачем автору макроса понадобились короткие имена ? Могу высказать гипотезу, что файлы лежат на сервере, а Vera
"vyberaet kartinku" по напечатаному каталогу и затем выбирает файл, действуя в операционной системе не поддерживающей длинных
имён.

Последний раз редактировалось Aent; 12.05.2010 в 22:59.
Aent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как приостановить работу программы? Virus191288 Общие вопросы Delphi 6 26.08.2009 19:50
Visual Prolog - помогите, пож, написать программы katerinakk Помощь студентам 1 07.06.2009 09:09
Как ускорить работу программы SibBear Общие вопросы Delphi 7 27.03.2009 14:40
помогите ускорить работу программы... Pashtet Паскаль, Turbo Pascal, PascalABC.NET 5 25.11.2008 22:12