2017-02-21 12 views
3

У меня есть лист Excel с четырьмя формами и несколько кнопок для запуска макросов. Формы называются topCircle, leftCircle, rightCircle & midCircle.VBA Excel копирует несколько фигур в буфер обмена

Требуется одна из кнопок для запуска макроса, который копирует четыре фигуры в буфер обмена, для вставки в другие документы Office.

Были некоторые статьи MSDN (например, https://msdn.microsoft.com/en-us/library/office/ff940375.aspx), но возникли проблемы. Пытаясь подражать пример на связанную статью я писал:

Set myDocument = Worksheets("Overall") 

myDocument.Shapes.Range(Array("leftCircle", "rightCircle", "topCircle", "midCircle")).Copy 

Но получает сообщение об ошибке «Объект не поддерживает это свойство или метод». Также попробовали еще несколько вещей без везения. Любые идеи о том, как заставить это работать? Ура!

+0

Даже если я не например, использовать 'Select', если вы переходите на' myDocument.Shapes.range (Array («leftCircle», «rightCircle», «topCircle», «midCircle»)). Выберите' и после добавления 'Selection.Copy' он будет Работа. Позвольте мне «поиграть» немного больше, чтобы избежать этой «уродливой» работы –

ответ

2

Кажется, что скопировать несколько фигур из листа Excel у вас есть 3 варианта:

Вариант 1: Используйте Select первым, чтобы выбрать все Shapes, а затем скопировать Selection:

myDocument.Shapes.Range(Array("leftCircle", "rightCircle", "topCircle", "midCircle")).Select 
Selection.Copy 

Вариант 2: Используйте Group, чтобы сгруппировать все выбранные фигуры, затем скопируйте их вместе, а затем используйте Ungroup, чтобы разделить их обратно:

With myDocument.Shapes.Range(Array("leftCircle", "rightCircle", "topCircle", "midCircle")) 
    .Group.Copy 
    ' paste to wherever you want 

    .Ungroup 
End With 

Вариант 3: использовать For Each MyShape In myDocument.Shapes перебрать все Shapes в myDocument листе, а если соответствующий двум один из Shape.Name вы хотели его, скопируйте его:

Dim MyShape  As Shape 

For Each MyShape In myDocument.Shapes 
    Select Case MyShape.Name 
     Case "leftCircle", "rightCircle", "topCircle", "midCircle" 
      MyShape.Copy 
      ' paste to wherever you want 

    End Select 
Next MyShape 
+0

Ну, решение группы отлично работало. Спасибо! – TheKeepa

Смежные вопросы