Ув. знатоки и ГУРУ VBA - на этом сайте описан способ, как загнать изображение в примечание ( http://www.planetaexcel.ru/tip.php?aid=40 ), но это в ручную очень долго делать если например нужно обработать поочереди скажем 50 ячеек - и пальцы заплетутся... :) У меня родилась идея, но воплотить в жизнь ее у меня нехватает опыта работы с VBA. Поэтому прошу вас - помогите создать макрос вставки изображения полученного с помощью кнопки "Print Scr" в примечание ячейки.
Шаги задачи (если проделать все вручную) :
1 - принтскриним необходимый нам экран (или активное окно +"Alt") - это все добро помещается в буфер обмена 2 - рисунок из буфера обмена нужно сохранить как рисунок на диске ( например C:/Temp/picture1.jpg ) 3 - становимся на нужную нам ячейку, в которую и собираемся вставить примечание-изображение 4 - теперь создаем примечание, выделяем пириметр примечания - он должен стать в мелкую точечку 5 - ПКМ, "Формат примечания...", "Цвета и линии", "цвет:", "Способы заливки...", закладка "Рисунок", "Рисунок..." 6 - в проводнике выбераем наш C:/Temp/picture1.jpg, "Ок", "Ок". 7 - удалить наш временный файл C:/Temp/picture1.jpg 8 - Все.
Осталось самое малое - это все на VBA написать. Т.е. Шаг№1 делаем всеже вручную, а далее "ВОЛШЕБНАЯ" кнопочка макроса... Пробовал макрорекордер - после записи - на "повторе" операции (примечание зарание удалил) ошибка компиляции... Так, что я в тупике. Помогите, если кто знает решение этой, на мой взгляд тяжелой, задачи.
Своими ручками и припомощи кусков кода из старых процедур добился желаемого результата !!!
Может кому пригодится :) Вот мой код :
'Снимок экрана из буфера в примечание ячейки 'Дата написания 18/11/2010 'За основу взят макрос Плекса - "Экспорт выделенного диапазона в GIF" Sub PrintScrinInComment() msg = "Данный макрос вставит рисунок из буфера в примечание ячейки " & Chr(10) & "Продолжить ? " Style = vbYesNo + vbInformation Title = "Drony 2010" Response = MsgBox(msg, Style, Title) If Response = vbYes Then ' Предупреждение о возможности обработки только одной ячейки If Selection.Cells.Count <> 1 Then GoTo 10 Else GoTo 20 10: MsgBox "Возможна работа только с ОДНОЙ ячейкой !!! ", vbYes, "Ошибка исходных данных" Exit Sub 20: If ActiveCell.Comment Is Nothing = False Then GoTo 30 Else GoTo 40 30: MsgBox "Активная ячейка уже имеет примечание !!!", vbYes, "Макрос остановлен" Exit Sub 40: On Error Resume Next ' пропускаем ошибки Kill "C:\temp\TempPicture.jpg" ' удаляем старый файл (если он конечно был) Application.ScreenUpdating = False ' создаваемая новая книга "невидимая" Workbooks.Add ' создаем новую временную книгу ActiveWorkbook.SaveAs Filename:= _ "C:\temp\TempBook.xls" ' сохраняем временную книгу ActiveSheet.Paste ' вставляем из буфера With ActiveSheet.ChartObjects.Add(0, 0, Selection.Width + 8, Selection.Height + 8).Chart .Paste .Export Filename:="C:\temp\TempPicture" & ".jpg", FilterName:="JPG" End With Application.DisplayAlerts = False ActiveWorkbook.ChangeFileAccess xlReadOnly Kill ActiveWorkbook.FullName ActiveWorkbook.Close False ' удаляем временную книгу Application.DisplayAlerts = True Application.ScreenUpdating = True
' START *Предложение редактировать полученное изображение msg = "Хотите редактировать изображение ?" Style = vbYesNo + vbInformation Title = "Что дальше делать..." Response = MsgBox(msg, Style, Title)
If Response = vbYes Then Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") Shell "mspaint.exe " & "C:\temp\TempPicture.jpg", vbMaximizedFocus ' Application.WindowState = xlMinimized MsgBox "Если Вы завершили редактирование - нажмите Ок", vbYes, "Ожидание завершения редактирования..." End If ' END *Предложение редактировать полученное изображение
ActiveCell.AddComment.Shape.Fill.UserPicture "C:\Temp\TempPicture.jpg" b = Application.UserName & " " & Date & " " & Time ActiveCell.Comment.Text Text:=Application.UserName & " " & Date & " " & Time End If
Ув. The_Prist, Вашу ссылку просмотрел... спасибо, почерпнул еще там много чего нового и полезного (например надстройка преобразования условного форматирования - были начинания в этом направлении и на этом форуме тоже я пытался развить эту тему). У меня вообще много идей (чего можно замутить в Excel), но не до всех доходят руки и не на все знаний достаточно... По материалу Вашего сайта есьт вопросик - не могли бы Вы поделиться методом которым вы "закрыли" свою надстройку("Project is unviewable"). Через открытие общего доступа такой блокировки не получается (хотя очень похожа). Мне хотелось бы свой "продукт" тоже под такую "защиту" посадить.
Андрей, со всем уважением - ничего, что вы обращаетесь на форум за бесплатной помощью и при этом жаждете:"поделиться методом которым вы "закрыли" свою надстройку("Project is unviewable")". Где здесь мораль? Посмотрите на к-во сообщений The_Prist. Это все безвозмездная помощь людям. Сравните с Вашим количеством. То есть Вы просите:"дайте мне открытый код, для того, что-бы я смог закрыть его для других"...
KukLP, это дело чистого интереса, а не то что Вы думаете... :) Открытый код подобной надстройки при желании посмотреть не такая большая проблема. А в этом случае и незачем, надстройка с УФ и так бесплатная и без ограничения - что меня вполнне устраивает.(P.S. - за открытыми кодами обращаться к их авторам). Меня интересует не как поломать , а как сделать такое? Потому, что получилось, как в жизни - "ломать, не стоить!".
А по поводу "Это все безвозмездная помощь людям" - в моем случае получилось, что спасение утопающих - дело рук самих утопающих. На заре развития сайта, я тоже занимался тут безвоздмездной помощью, но потом просто надоело (а помог тоже не мало...(конечно с The_Prist не сравнить))
Ну если сдесь не найду решения, то поможет Google , главное цель.
Нет, Дим. Я понял так же, как и ты. Просто подсмотренная закономерность - чем ниже знание Эксель, тем больше желания скрыть, запаролить, зашифровать. Я уже писал, что если у человека соображалка на месте, таких вопросов не возникнет. Сделает нигде не обсуждавшийся способ защиты. Но! Было бы что защищать. Ну не шедевры это. Тут же, на форуме надергает эпизодов и даже не вникнув до конца, как все работает, давай прятать от других. Понимаю - работа, конкуренты. Я на работе не жлоблюсь помогать другим. И я знаю и все знают, что меня переплюнуть - хлопотное дело. Нужно быть человеком увлеченным, а не просто на работе отбывать время. А вот это редкость:-(
The_Prist,хоть наставьте на путь истенный. Это Вы делаете отдельно установленным приложением (программой)? Или это заморочка с самим Excel-ем? (например дать общий доступ, а потом сохранить как .xla). Поверьте, код мне от Вас никчему, я хочу на свои "творения" такой замок наложить. Вот ломать научился(*только в личных целях, без распространения), а вот наоборот (т.е. сделать с нуля) никак.
АнДрЕй02 извините, если задел Вас. Но этот вопрос регулярно возникает. Форум(обсуждение - см. Википедия) по определению призван коллективно решать вопросы, а не помогать скрытию, запароливанию и т.д.
{quote}{login=АнДрЕй02}{date=18.11.2010 09:26}{thema=}{post}The_Prist,хоть наставьте на путь истенный. Это Вы делаете отдельно установленным приложением (программой)? Или это заморочка с самим Excel-ем? (например дать общий доступ, а потом сохранить как .xla). Поверьте, код мне от Вас никчему, я хочу на свои "творения" такой замок наложить. Вот ломать научился(*только в личных целях, без распространения), а вот наоборот (т.е. сделать с нуля) никак. С уважением, Андрей.{/post}{/quote} Дык, ответил Вам The_Prist от 18.11.2010, 20:40.
KukLP, ничего страшного, я все понимаю. И на этой страничке обсуждать и выложить метод блокировки - было глупо. Но раз все такие добрые, то зачем придумели и используют эти самые блокировки? У меня коммерческой заинтересованности в ломании и создании защит нет.
Пост создал по одному вопросу, который сам же и решил (еще и поделился). Потому, что когда все сработало от начала до конца и получился нужный результат - чувства переполнили..Прибежал с работы домой и поделился радостью..А может еще кому сгодится (было бы приятно).
Если бы я был Великим занатоком VBA - я бы не задавал свои вопросы, а отвечал на чжие. :)
Ну если все так сложно... то будем считать что это просто шутка такая...
The_Prist, спасибо - я понял. Просто не с первого раза ... :) "Protect VBA" - решил, что Вы на англ. выразились... Теперь знаю, что это название приложения. (до этого не слыхал про него)