Давайте посмотрим, что мы можем сделать ... Вы хотите, чтобы данные перемещались из Sheets (1) на вкладку Sheets (2), затем вы хотите, чтобы Sheets (2) были перемещены в новый файл, и этот файл был сохранен (возможно, закрыт).
Если это так, вам нужно будет сделать пару вещей, некоторые из которых могут помочь вашему кодированию в долгосрочной перспективе:
1) Избегать. Выберите /.Активируйте там, где это возможно
2) Используйте Option Explicit в верхней части вашего модуля, прежде чем вы начнете перечислять подпрограммы (заставит вас объявлять все переменные)
Давайте разберем вашу проблему немного дальше ... у вас есть одно назначенное место на листах (1) для ввода данных, которое будет введено (от нажатия кнопки) до листов(2).Предположим, что ваши заголовки находятся в столбце 1 («A»), а входные данные - в столбце 2 («B»):
dim lrd as long
With Sheets(2)
lrd = .cells(.rows.count,1).end(xlup).row
.Cells(lrd+1,1).Value = Sheets(1).cells(1,2).Value 'Date
.Cells(lrd+1,2).Value = Sheets(1).cells(2,2).Value 'State
.Cells(lrd+1,3).Value = Sheets(1).cells(3,2).Value '# People
'You will probably want to clear data from the input cells after that
Sheets(1).Range(Sheets(1).Cells(1,2),Sheets(1).Cells(3,2)).ClearContents
End With
Хорошо, теперь данные существуют в Sheets (2).Теперь вы хотите, чтобы листы (2) были скопированы (переносит лист в новую книгу):
Sheets(2).Copy
Затем сохраните как новую книгу, затем сохраните / закройте:
ActiveWorkbook.SaveAs "C:\NameOfFile.xlsx", FileFormat:=51
ActiveWorkbook.Close SaveChanges:=True
Тодолжен оставить вас с открытой рабочей книгой.Я бы порекомендовал сделать некоторые имена файлов, основанные на некоторых более динамичных, хотя я предоставил фиксированную ситуацию.Обратите внимание, что вашим исходным файлом будет xlsm, а сохранение в формате xlsx приведет к удалению макросов из новой книги в случае, если что-либо будет перенесено.
В целом это выглядит так:
dim lrd as long
With Sheets(2)
lrd = .cells(.rows.count,1).end(xlup).row
.Cells(lrd+1,1).Value = Sheets(1).cells(1,2).Value 'Date
.Cells(lrd+1,2).Value = Sheets(1).cells(2,2).Value 'State
.Cells(lrd+1,3).Value = Sheets(1).cells(3,2).Value '# People
'You will probably want to clear data from the input cells after that
Sheets(1).Range(Sheets(1).Cells(1,2),Sheets(1).Cells(3,2)).ClearContents
End With
Sheets(2).Copy
ActiveWorkbook.SaveAs "C:\NameOfFile.xlsx", FileFormat:=51
ActiveWorkbook.Close SaveChanges:=True