Создать и скопировать новый лист - PullRequest
0 голосов
/ 22 марта 2019

Новичок здесь, У меня есть шаблон листа с таблицей, содержащей формулы. В конце я хочу нажать кнопку для создания и копирования значений из шаблона листа в новый лист вот что я получил:

Sub CreateSheet()
Dim xName As String
Dim xSht As Object
Dim xNWS As Worksheet
On Error Resume Next
xName = Application.InputBox("Please enter a name for this new sheet ", "New Sheet")
If xName = "" Then Exit Sub
Set xSht = Sheets(xName)
If Not xSht Is Nothing Then
MsgBox "Sheet cannot be created as there is already a worksheet with the same name in this workbook"
Exit Sub
End If
ActiveSheet.Copy after:=Sheets(Sheets.Count)
Set xNWS = Sheets(Sheets.Count)
xNWS.Name = xName
End Sub

Проблема в том, что я просто хочу вставить значения без каких-либо формул из шаблон листа

Спасибо

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы можете найти решение, которое создаст пустой лист вручную и использовать PasteSpecial с параметром xlPasteValues для копирования только значений, но это не приведет к копированию форматирования.Затем вы можете использовать другой PasteSpecial для копирования форматирования.

Альтернативой является сначала скопировать весь шаблон, как вы это делаете, включая формулы, и добавить следующий оператор.Сначала это выглядит странно, но он преобразует все формулы в значения.

xNWS.UsedRange.Value2 = xNWS.UsedRange.Value2
0 голосов
/ 22 марта 2019

вы ищете метод Range.PasteSpecial.

полное выражение:
PasteSpecial( _Paste_ , _Operation_ , _SkipBlanks_ , _Transpose_ )

см. https://docs.microsoft.com/en-us/office/vba/api/excel.range.pastespecial

На данный момент вы вставляете весь лист, что довольно неэффективно.Я предлагаю ознакомиться с Listobject(s), чтобы определить вашу таблицу в VBA, а затем использовать Range("YourTable").PasteSpecial _ Paste:=xlPasteValues, чтобы скопировать только значения из вашей таблицы на новый лист.

вот краткий пример:

Private Sub Sample()
Dim tbl As ListObject
Set tbl =Sheets("YourSheet").Listobjects("YourTable") 'note the "s" in ListObjects
End Sub

Чтобы обратиться к вашему диапазону таблиц, используйте Range("TableName").ListObject.
См. https://www.dingbatdata.com/2017/11/24/referencing-listobjects-with-vba для получения дополнительной информации

Надеюсь, что это было полезно, хорошего дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...