2015-03-16 3 views
0

Я пытаюсь вставить текстовое поле из sheet1 на Лист2Excel VBA Форма Paste не работает

Function footer() 
Application.Volatile True 
r = Application.Caller.Address 
SheetName = Application.Caller.Parent.Name 

    Select Case Range("Locale").Value 
     Case "RU": boxx = Range("company").Value & Range("Locale") 
     Case "EN": boxx = Range("company").Value & Range("Locale") 
    End Select 
Worksheets("Translations").Shapes(boxx).Copy 
MsgBox Worksheets("Translations").Shapes(boxx).TextFrame.Characters.Text 
ActiveSheet.Paste 
End Function 

Msgbox Выглядит хорошо, но функция пасты не делать ничего, я судимое различные способы

  • ActiveSheet.Range ("A1 ") .Paste
  • ActiveSheet.Range (" A1"). PasteSpecial
  • листы (SheetName) .Paste
  • листы (SheetName) .Range (r). Паста

Все не работает, только ничего не появляется на листе, что не так?

+1

Если вы вызываете эту функцию из ячейки, она не будет работать. UDF в ячейке не может скопировать форму. – Rory

+0

да, это вызов из ячейки –

+0

Тогда это не сработает, как я уже сказал. UDF не допускается. Я опубликую обходное решение – Rory

ответ

1

Хотя вы не можете скопировать и вставить форму, вы можете добавить новую форму и скопировать текст и форматирование оригинала - например:

Function footer() 
    Dim boxx     As String 
    Dim shpTo     As Shape 
    Dim shpFrom    As Shape 

    Application.Volatile True 

    Select Case Range("Locale").Value 
     Case "RU": boxx = Range("company").Value & Range("Locale") 
     Case "EN": boxx = Range("company").Value & Range("Locale") 
    End Select 
    Set shpFrom = Worksheets("Translations").Shapes(boxx) 
    With Application.Caller 
     Set shpTo = .Worksheet.Shapes.AddShape(shpFrom.AutoShapeType, .Left, .Top, shpFrom.Width, shpFrom.Height) 
     shpTo.TextFrame.Characters.Text = shpFrom.TextFrame.Characters.Text 
    End With 
    shpFrom.PickUp 
    shpTo.Apply 
End Function 
+0

Спасибо, но я уже пробовал этот путь, мне это не кажется, поскольку он удаляет все форматирования в тексте –

0

Попробуйте этот метод копирования

ThisWorkbook.Sheets("Sheet1").Shapes.Range(Array(shpFrom.Name)).Select 
Selection.Copy