Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 07:35:11

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 240 Сообщений в 5 456 Тем от 6 757 Пользователей
Последний пользователь: kkmark
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Положение на листе копируемых с листа на лист кнопок
Страниц: [1]   Вниз
Печать
Автор Тема: Положение на листе копируемых с листа на лист кнопок  (Прочитано 3595 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« : 12.07.2019, 11:55:39 »

Здравствуйте.
В приложении файл с кодом, позволяющим копировать кнопки с листа Sheet_Source на лист Sheet_Target приверно в то же место, где они находятся в листе изначальном. Для этого, перед вставкой кнопки, используется строка кода
Код: (vb)
                    Application.Goto reference:=LWt_Worksheet_Target.Range(LSh_Button_Shape.TopLeftCell.Address), scroll:=True
                   LWt_Worksheet_Target.Paste
.
С существующим кодом точность попадания почти неудовлетворительная.Кто-нибудь может помочь ее улучшить ?
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 12.07.2019, 19:35:31 »

И много таких кнопок? Может быть, есть смысл пойти другим путем? Какова конечная цель? Кнопки для чего?
Записан
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #2 : 12.07.2019, 21:18:53 »

Vikktur, спасибо за вопрос. Да, кнопок может быть много (3-10). И после копирования листа через ctrl+A / ctrl+C / ctrl + V  в новом листе оказываются иногда скопированы не все кнопки.
« Последнее редактирование: 12.07.2019, 21:26:37 от Valetnina » Записан
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #3 : 12.07.2019, 21:19:57 »

Нашла более точное решение : через свойства .Top и .Left. Ниже код полностью, может кому будет полезен :
Код: (vb)
Sub V_Sub_Buttons_Copy()

Dim LSh_Button_Source As Shape
Dim LO_Button_Target As Object
Dim LWt_Worksheet_Source As Worksheet
Dim LWt_Worksheet_Target As Worksheet
Dim LS_Shape_Source_TopLeftCell_Address As String
Dim LL_Shape_Source_Top_Position As Long
Dim LL_Shape_Source_Left_Position As Long
Dim LS_Button_Name As String
Dim LC_Comment_Number As Long

Set LWt_Worksheet_Target = Application.Worksheets("Sheet_Target")
Set LWt_Worksheet_Source = Application.Worksheets("Sheet_Source")

'Application.ScreenUpdating = false
For Each LSh_Button_Source In LWt_Worksheet_Target.Shapes
        LSh_Button_Source.Delete
Next LSh_Button_Source 'In LWt_Worksheet_Target.Shapes

Debug.Print "Number of Shapes in Sheet_Source : " & LWt_Worksheet_Source.Shapes.Count
Debug.Print "Number of Shapes in Sheet_Target blank : " & LWt_Worksheet_Target.Shapes.Count
LC_Comment_Number = 0
For Each LSh_Button_Source In LWt_Worksheet_Source.Shapes
'            LWt_Worksheet_Source.Activate
'    Debug.Print LSh_Button_Source.TopLeftCell.Address
    LS_Button_Name = LSh_Button_Source.Name
        If Not LS_Button_Name Like "Comment*" Then
           
        LSh_Button_Source.Copy
            LS_Shape_Source_TopLeftCell_Address = LSh_Button_Source.TopLeftCell.Address
            LL_Shape_Source_Top_Position = LSh_Button_Source.Top
            LL_Shape_Source_Left_Position = LSh_Button_Source.Left
'            Debug.Print LSh_Button_Source.Name & " Top= " & LL_Shape_Source_Top_Position & " Left = " & LL_Shape_Source_Left_Position
                       
    '                    Application.Goto reference:=LWt_Worksheet_Target.Range(LSh_Button_Source.TopLeftCell.Address, LL_Shape_Source_Top_Position), scroll:=True
    '                    Stop
                            LWt_Worksheet_Target.Activate
                            LWt_Worksheet_Target.Paste
                           
                           Set LO_Button_Target = Selection
                            LO_Button_Target.Top = LL_Shape_Source_Top_Position
                            LO_Button_Target.Left = LL_Shape_Source_Left_Position
'            Debug.Print LO_Button_Target.Name & " Top= " & LL_Shape_Source_Top_Position & " Left = " & LL_Shape_Source_Left_Position
                           
    Else
        LC_Comment_Number = 1 + LC_Comment_Number
    End If 'f Not LS_Button_Name Like "Comment*" Then
        Next LSh_Button_Source
       
Debug.Print "Number of Comments (Comments are the Shapes not to be copied) : " & LC_Comment_Number
Debug.Print "Number of Shapes in Sheet_Source : "; LWt_Worksheet_Source.Shapes.Count
Debug.Print "Number of Shapes in Sheet_Target after the Sub execution : " & LWt_Worksheet_Target.Shapes.Count
'Application.ScreenUpdating = True

End Sub 'V_Sub_Buttons_Copy
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #4 : 12.07.2019, 21:54:05 »

Какова конечная цель? Кнопки для чего?
Спасибо сказали, но ответить забыли. Хотя, если Вам не интересны другие возможные варианты, то и ответы не нужны
« Последнее редактирование: 12.07.2019, 21:55:40 от vikttur » Записан
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #5 : 17.07.2019, 18:08:36 »

Для чего кнопки ? Разные цели у них : пересчет данных на листе, перевод  листа в защищенный режим и обратно, вызов польз.форм, отправка пользовательской версии файла эл.сообщением и тому подобное.
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #6 : 17.07.2019, 20:44:54 »

Понятно. Были подозрения, что кнопки для одинаковых операций в разных диапазонах.
В Вашем случае имеет смысл разместить все это на форме. Вызывать форму или одной кнопкой на листе, или событием листа (например, двойной клик на ячейке в шапке таблицы). Кнопки формы будут активировать макросы для активного листа
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru