EXCEL 2007 - нужна помощь в создании кнопки, которая берет содержимое активного листа и вставляет его в новый лист - PullRequest
1 голос
/ 17 ноября 2009

У меня есть поиск по всему сайту, чтобы найти ответ на мою проблему, и большинство связанных с этим решений для гораздо более сложной проблемы. Вот что мне нужно было сделать. Я создал простую форму в Excel 2007. Я ищу возможность добавить кнопку внизу формы, которая позволяет пользователю нажимать на кнопку и копировать этот лист в новый лист в том же документе Excel. В основном просто дублирование активного листа.

Я пытался сделать это с макросами, но не получил желаемых результатов, и большинство наших коллег по-прежнему используют Excel 2003, поэтому я не уверен, что макросы будут работать в более старой версии Excel. Я не знаю VBA, поэтому я прихожу сюда в поисках помощи от всех вас.

Итак, подведем итог.

  1. Один лист документа Excel с простой формой и кнопкой команды внизу активной рабочей таблицы
  2. Командная кнопка «Копировать и вставить» этого листа в новый лист в том же документе Excel
  3. Решение, которое может работать в Excel 2003 и 2007, если это возможно. Если нет, то за 2007 год.

Огромное спасибо заранее всем, кто хочет помочь начинающему пользователю Excel.

Ответы [ 4 ]

1 голос
/ 17 ноября 2009

Предполагая, что вы знаете, как добавить кнопку, вот простая строка кода для дублирования активной рабочей таблицы:

Sub Button1_Click()
    ActiveSheet.Copy after:=ActiveSheet
End Sub
0 голосов
/ 13 ноября 2017

Я знаю, что вопрос довольно старый, но просто хотел отметить, что вы (и пользователь) можете сделать то же самое с нулевым кодом: щелкните правой кнопкой мыши на имени листа внизу и выберите Переместить или Скопируйте ... , затем установите флажок Создать копию и нажмите ОК . Да, это занимает 4 клика, но это очень просто и позволяет избежать кода.

0 голосов
/ 17 ноября 2009

Этот метод будет работать как в Excel 2003, так и в Excel 2007. В форму добавьте следующий метод:

Sub CopySheet(WorkSheetName as String)

    Dim WrkSht As Worksheet
    Set WrkSht = Sheets(WorkSheetName)

    WrkSht.Copy After:=Sheets(WorkSheetName)

    Set WrkSht = Nothing

End Sub

Из события нажатия кнопки вызовите его, используя:

Sub Button1_Click()

    Call CopySheet("WorkSheetToCopyName") 
    'You could also replace the string name with ActiveSheet if you so wish

End Sub

При этом копия рабочего листа будет помещена между текущим и следующим листом. Я протестировал его в Excel 2003 и Excel 2007, и он работает в обоих. К сожалению, второе имя не выглядит симпатично - оно просто получает то же имя, что и исходный лист, после которого ставится (2).

Все форматирование, защита и формулы тоже скопированы - это копия первого.

0 голосов
/ 17 ноября 2009

Может быть что-то вроде этого (проверено только в Excel 2003):

Dim srcSheet, dstSheet
    Set srcSheet = ActiveSheet

    Sheets.Add
    Set dstSheet = ActiveSheet

    srcSheet.Activate
    srcSheet.Cells.Select
    Selection.Copy

    dstSheet.Activate
    dstSheet.Cells.Select
    ActiveSheet.Paste
...