将数据保存在一个文件中,并在每次保存时将输出转到另一个文件

时间:2018-06-11 14:07:28

标签: vba excel-vba loops excel

在一个标签中,我有信息,我在第二个标签上输出了信息(它的深度比这个更深,但我尝试尽可能简单) enter image description here 将此称为(1)

我想创建另一个文件,每次保存(1)时,(1)的Tab 2中的信息堆叠在下面的(2)中:

enter image description here 将其称为(2)

我猜这是基于宏的,但我不知道该怎么做。

为了澄清,第一次有人将数据保存到(1)中的标签1时,它的输出被发送到(1)中的标签2。然后我希望将数据保存到新文件(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 :(得分:0)

让我们看看我们能做什么......您希望数据从表格(1)移动到标签表格(2),然后您希望表格(2)移动到新文件并保存该文件(可能已关闭)。 / p>

如果是这种情况,你需要做一些事情,其中​​一些可能有助于你的编码从长远来看:

  • 1)避免。选择/。尽可能激活

  • 2)在开始列出子程序之前,在模块顶部使用Option Explicit(将强制您声明所有变量)

让我们进一步细分您的问题...您在Sheets(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)中。您现在需要Sheets(2)到.Copy(将工作表带到新工作簿):

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