Страницы: 1
RSS
Использование аргументов в методе Application.Dialogs(xlDialogInsertPicture)
 
Добрый день, форумчане!

Никак не смог разобраться с аргуметами в методе Application.Dialogs(xlDialogInsertPicture) , прошу вашей помощи. Хочу чтобы при открытии диалогового окна "Вставка рисунка" в поле "Имя файла" прописывалось заранее заданное имя (в итоговом файле: статическая карта из "Яндекс Карт" из интернета). Примено также как это прописывается при использовании :
Application.Dialogs(xlDialogSaveAs).Show "NewBook"

Перепробовал несколько разных вариантов, в том числе:
Код
Sub PastePicture()  
Application.Dialogs(xlDialogInsertPicture).Show Arg1:="C:\DISTR\Picture.jpg" 
Application.Dialogs(xlDialogInsertPicture).Show "C:\DISTR\Picture.jpg"  
End Sub 

Не помогают.

Способ вставки ActiveSheet.Pictures.Insert выдает ошибку, так как установлены ограничение на обращение к ресурсам Яндекс.
Подскажите пожалуйста, как можно решить проблему? Возможно есть еще способы вставки изображений?
 
Похоже, кроме .Show никаких параметров у xlDialogInsertPicture нет, в том числе и не получить путь к выбранному файлу.
нагуглил только это:
Код
    Dim myPicture As Picture 
     Dim Pic As String
     Pic = Application.GetOpenFilename("Image Files (*.jpeg;*.jpg;*.emf;*.wmf;*.gif), *.bmp")
     ActiveSheet.Pictures.Insert(Pic).Select

не совсем понял, что мешает использовать ActiveSheet.Pictures.Insert - ровно также не должно давать использовать и Application.Dialogs(xlDialogInsertPicture).Show, если у вас установлены ограничения
F1 творит чудеса
 
После ввода адреса картинки в Application.Dialogs(xlDialogInsertPicture).Show система выдает "Предупреждение системы безопасности: Сведения об отзыве сертификата безопасности для этого сайта недоступны. Продолжить?" http://savepic.ru/10322212.jpg
После нажатия "ДА". Картинка вставляется.

А при применении ActiveSheet.Pictures.Insert макрос выдает ошибку Run-time error 1004: Невозможно получить свойство Insert класса Pictures.При выборе "Debug", выделяется строчка с ActiveSheet.Pictures.Insert. Я так понял эта ошибка возникает при недоступности картинки.

Возможно проблема решится если как-то включить в код макроса добавление сертификатов безопасности (api-maps.yandex.ru и static-maps.yandex.ru), только не знаю как. Макрорекордер не записывает добавление сертификатов.
На домашнем компьютере работает все прекрасно.
 
Доброе время суток
Цитата
AlbertSF написал:
ActiveSheet.Pictures.Insert
Так работает по вашей ссылке
Код
ActiveSheet.Shapes.AddPicture "http://savepic.ru/10322212.jpg", msoFalse, msoTrue, 0, 0, -1, -1

Успехов.
 
Андрей VG, Спасибо!
Так работает, но при замене на необходимый адрес (https://static-maps.yandex.ru/1.x/?ll=37.620070,55.753630&l=map&pt=37.620070,55.753630,pmwtm1~37.64,...) выдает ошибку файл не найден.
 
Цитата
AlbertSF написал:
выдает ошибку файл не найден.
Тогда не знаю. У меня
Код
ActiveSheet.Shapes.AddPicture "https://static-maps.yandex.ru/1.x/?ll=37.620070,55.753630&l=map&pt=37.620070,55.753630,pmwtm1~37.64,55.76363,pmwtm99", msoFalse, msoTrue, 0, 0, -1, -1
загрузил (Excel 2016)
 
У меня #6 сработал (2010)
 
Андрей VG, спасибо еще раз!
Понимаю, что решать проблему дистанционно очень трудно!
У меня на домашнем компьютере тоже все работает, однако на работе по причине ограничений доступа к некоторым сайтам возникают ошибки.
Сейчас работу макроса приходится останавливать, копировать из ячейки во Вставку рисунка путь к картине (который изменяется при изменении адресов) и запускать макрос еще раз.
Для упрощения процесса была идея передать через аргументы имя файла во вставку рисунка (также как это делается в Application.Dialogs(xlDialogSaveAs).Show "NewBook"), но что-то не получается.

Спасибо всем у кого отнял время, пойду разбираться дальше и искать обходные пути!
 
Решил проблему следующим образом:
Код
...
L1:
Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
XMLHTTP.Open "GET", Путь_к_картинке, "False"
On Error GoTo L1
XMLHTTP.send
ActiveSheet.Pictures.Insert (Путь_к_картинке)
Почитал про прокси и решил, что это может помочь. Проверил, действительно помогло.
"Зацикливать" пришлось потому, что при первом выполнении "XMLHTTP.send" выдает ошибку безопасности, а при втором выполнении ошибок не возникает. Почему так - не понял. Надеюсь такое "зацикливание" не приведет к непрерывному циклу.  
 
хм... проверьте на заведомо неправильном "Путь_к_картинке" :)
F1 творит чудеса
 
Максим Зеленский,не понял немного вашего сообщения.

Вместо "Путь_к_картинке" используется что-то вроде (https://static-maps.yandex.ru/1.x/?ll=37.620070,55.753630&l=map&pt=37.620070,55.753630,pmwtm1~37.64,...) (всегда разный адрес).
Проверил на разных машинах - работает.
 
AlbertSF, я имел ввиду, не будет ли зацикливаться, если путь к картинке ошибочный.
что вернет вот эта строка:
Код
XMLHTTP.Open "GET", Путь_к_картинке, "False"
если путь ошибочный. Если ошибку, по которой перейдет на L1, то лучше просто два раза подряд написать, вместо такого цикла.
F1 творит чудеса
 
Максим Зеленский, хорошая идея, спасибо!
Страницы: 1
Наверх