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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2019, 21:33   #11
rediffusion
Пользователь
 
Аватар для rediffusion
 
Регистрация: 30.05.2019
Сообщений: 36
По умолчанию

Нашёл решение неразрешимого казалось бы!

Код:
'Заливка картинкой в `Заметку` (диалог):
Sub Note_FiilPictureDialog(control As IRibbonControl)
    Dim img As FileDialog
    Dim i_add As String
    Dim myComm As Comment

    Set img = Application.FileDialog(msoFileDialogFilePicker)
        img.AllowMultiSelect = False
        img.Title = "Выберите изображение!"
        img.Show

    If img.SelectedItems.Count < 1 Then
    Exit Sub

    Else
        i_add = img.SelectedItems(1)
    End If

'Если ячейка содержит `Заметку` удаляем!
    If Not ActiveCell.Comment Is Nothing Then
        ActiveCell.Comment.Delete
    End If

    On Error GoTo nexterr
    ActiveCell.ClearComments

    Set myComm = ActiveCell.AddComment
        With myComm.Shape
          .Height = 110
          .Width = 200
          .AutoShapeType = 1             'форма
'          .Fill.UserTextured
          .Fill.UserPicture i_add        'Заливка картинкой.
          .Line.ForeColor.RGB = RGB(255, 0, 0)
          .DrawingObject.Font.Name = "Consolas"
          .DrawingObject.Font.FontStyle = "normal"
          .DrawingObject.Font.Size = 8
          
          'Эмулировать выбор "Изменить `Заметку`".
           SendKeys "+{F2}"
          Exit Sub
          
nexterr:
        MsgBox "Можно выбирать только изображения!", vbCritical, "Ошибка"
        ActiveCell.ClearComments
        End With
End Sub
rediffusion вне форума Ответить с цитированием
Старый 05.08.2019, 20:02   #12
rediffusion
Пользователь
 
Аватар для rediffusion
 
Регистрация: 30.05.2019
Сообщений: 36
По умолчанию

@EducatedFool

Попробовал самовольно адаптировать под x64 не получилось! Пример того что я накалякал тут.
Посёрфил `Internet`... один чувак пишет:
Цитата:
Этот код не является `VBA` и не будет работать. Найдите "Stephen Bullen's PastePicture" модуль, а затем включите его в свой код.
Это не тривиальный код, поэтому в качестве альтернативы вы можете добавить пустую диаграмму где-нибудь, вставить в нее, а затем экспортировать диаграмму в виде изображения, чтобы вы могли использовать этот файл в качестве источника в своем коде выше.
Ещё нашёл интересный `Add-in` в принципе там есть это всё и больше... только платно всё это дело (видать поэтому не особо кто жаждит делиться кодами такого характера).
rediffusion вне форума Ответить с цитированием
Старый 20.07.2020, 17:45   #13
Maksuron
 
Регистрация: 17.11.2018
Сообщений: 4
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Ральф Сэт, там очень много надо в коде менять
в том числе определения переменных внутри функций

Т.е. менять вот такие строки:
Код:
Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, hCopy As Long
на 5 строк типа
Код:
    #If VBA7 Then
        Dim H As LongPtr, hPicAvail As LongPtr, hPtr As LongPtr, hPal As LongPtr, hCopy As LongPtr
    #Else
        Dim H As Long, hPicAvail As Long, hPtr As Long, hPal As Long, hCopy As Long
    #End If
и так во всех функциях
и еще надо обходить один глюк 64-битных систем

Зачем вам вообще через буфер обмена картинку гонять?
Почему напрямую из файла не вставить?
Здравствуйте! Мне нужен этот макрос (который копирует изображения из буфера в примечание к ячейке), способный работать не только в 32bit, но и в 64bit. Также желательно,чтобы сохранял не в bmp, а в jpg. Хочу узнать, возможно ли это, и какова цена вопроса и сроки (2 варианта цен - с сохранением изображений в jpg и просто адаптация под 64bit). Спасибо.
Maksuron вне форума Ответить с цитированием
Старый 23.07.2020, 05:53   #14
Maksuron
 
Регистрация: 17.11.2018
Сообщений: 4
По умолчанию

Цитата:
Сообщение от rediffusion Посмотреть сообщение
@EducatedFool

Попробовал самовольно адаптировать под x64 не получилось! Пример того что я накалякал тут.
Посёрфил `Internet`... один чувак пишет:

Ещё нашёл интересный `Add-in` в принципе там есть это всё и больше... только платно всё это дело (видать поэтому не особо кто жаждит делиться кодами такого характера).

Мне помогли иностранные коллеги с адаптацией файла на 64 bit. На моей копии программы работает, просьба - проверить у себя. Как сказали, не все Long могут быть LongPtr, и используется oleaut32 вместо olepro32 - теперь ошибки "Буфер обмена пуст" нет, и все работает))) Приложил рабочую копию, вдруг кому пригодится.
Вложения
Тип файла: zip Inserting picture macro.zip (26.5 Кб, 12 просмотров)

Последний раз редактировалось Maksuron; 23.07.2020 в 06:34.
Maksuron вне форума Ответить с цитированием
Старый 23.07.2020, 11:29   #15
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

На практике данный функционал где используется?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.07.2020, 11:44   #16
Maksuron
 
Регистрация: 17.11.2018
Сообщений: 4
По умолчанию

Aleksandr H.,
Я веду в excel журнал, и мне нужно прикреплять скриншоты из программы. Делать через заливку фона примечания, о чем есть куча "уроков" от индусов на Ютуб - нереально долго. Макрос на вставку файла, который был в свободном доступе ранее - гораздо удобнее, но каждый раз сначала сохранять файл, потом через макрос его искать и вставлять - тоже не оч. А буфер обмена спасает. Макросом, который был описан в этой теме, пользуюсь давно (собственно, здесь его и взял). Но теперь часто приходится работать в офисе 64 бит, и макрос не работал...До недавней поры) Теперь работает.

Последний раз редактировалось Maksuron; 23.07.2020 в 11:56.
Maksuron вне форума Ответить с цитированием
Старый 31.07.2020, 03:17   #17
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
но каждый раз сначала сохранять файл, потом через макрос его искать и вставлять - тоже не оч
Большинство программ для снятия скриншотов (я пользуюсь бесплатной Lightshot) умеют сохранять в файл.
Просто нажимаете в программе для снятия скриншота не «Скопировать в буфер обмена», а «Сохранить в файл»
И в буфере обмена будет полный путь к созданной картинке

Останется макросом (простым, из 4 строк) вставить картинку в примечание
(первые 2 строки - взять путь из буфера обмена, еще 2 строки - вставить картинку)

Можно, конечно, переделать под 64-битный Office (я это делал), но там много сложного кода, - проще не связываться

PS: Еще вариант, если программа снятия скриншотов не копирует путь к созданному файлу.
В любом случае, созданный файл сохраняется в какую-то одну и ту же папку.
Задача макроса упрощается, - достаточно найти самый свежий файл в папке (по дате создания):
https://excelvba.ru/code/LastFile
EducatedFool вне форума Ответить с цитированием
Старый 31.07.2020, 09:00   #18
Maksuron
 
Регистрация: 17.11.2018
Сообщений: 4
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Можно, конечно, переделать под 64-битный Office (я это делал), но там много сложного кода, - проще не связываться
https://excelvba.ru/code/LastFile
Спасибо, я понял, и про фишку в Лайтшоте в курсе) Только лично для меня это все равно не очень. И макрос под 64 бит Офис мне уже переделали - я прикрепил его постом выше - он рабочий.
Maksuron вне форума Ответить с цитированием
Старый 13.11.2023, 17:14   #19
Alexxxiy
Новичок
Джуниор
 
Регистрация: 18.03.2021
Сообщений: 1
По умолчанию

Maksuron, Спасибо тебе, добрый человек!��
Alexxxiy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очистка буфера обмена beegl Общие вопросы Delphi 21 04.01.2017 11:01
Как вставить данные из буфера обмена в ячейки Excel без форматирования данных? protected_by Microsoft Office Excel 2 16.12.2013 19:38
Hook буфера обмена rust-02 Общие вопросы Delphi 0 20.09.2010 19:21
Вставка из буфера обмена volonc Microsoft Office Excel 12 17.07.2010 19:04
Копирование изображения из буфера обмена. yuran666666 Win Api 2 24.02.2010 13:39