Сохранение данных в одном файле и вывод их в другой файл при каждом сохранении - PullRequest
0 голосов
/ 11 июня 2018

В одной вкладке у меня есть информация, где я сделал так, чтобы она выводила информацию на второй вкладке (это более детально, но я попытался сделать это как можно более простым) enter image description here см.это как (1)

Я хочу создать другой файл, в котором при каждом сохранении (1) информация из вкладки 2 в (1) складывается в (2) ниже:

enter image description here обозначить это как (2)

Я предполагаю, что это основано на макросах, но я не уверен, как это сделать.

Для пояснения: когда кто-то впервые сохраняет данные на вкладке 1 в (1), их выходные данные отправляются на вкладку 2 в (1).Затем я хочу, чтобы эти данные были сохранены в новом файле (2) как XY Z. В следующий раз, когда кто-то сохранит данные в (1), я хочу, чтобы они всплыли в новом файле (2) как AB C.Таким образом, каждый раз, когда файл сохраняется, в новом файле создаются новые данные (2).


Предоставленный код из OP (взят из комментариев):

Private Sub CommandButton21_Click() 
    Dim Name As String 
    Dim Date As String 
    Dim State As String 
    Worksheets("Sheet1").Select FileName = Range("B1") 
    EffectiveDate = Range("B2") 
    State = Range("B3") 
    Set myData = Workbooks.Open("H: \NameDateState.xlsx") 
    Worksheets("Sheet1").Select 
    Worksheets("sheet1").Range("A1").Select 
    RowCount = Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count 
    With Worksheets("Sheet1")
        .Range("A1") .Offset(RowCount, 0) = Name 
        .Offset(RowCount, 1) = Date 
        .Offset(RowCount, 2) = State 
    End With 
    myData.Save 
End Sub

1 Ответ

0 голосов
/ 11 июня 2018

Давайте посмотрим, что мы можем сделать ... Вы хотите, чтобы данные перемещались из 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...