如何在Excel中将单元格数据从模板表发送到主表?

时间:2019-04-10 04:34:53

标签: excel vba

我正在为咖啡馆创建生产管理表。其中有一个称为生产的主工作表,生产有一个新的客户按钮,该按钮创建一个新工作表并按程序复制发票模板并将其粘贴到新创建的工作表中。我要自动将所有工作表的总和从所有工作表发送到主生产工作表。我通常可以做到,但是在使用按钮插入新模板(在新创建的工作表中)时,单击它会有些棘手。

 Private Sub CommandButton1_Click()
If TextBox1.Value = "" Or TextBox2.Value = "" Then
   If MsgBox("Name and Address are Important", vbQuestion + vbOKOnly) <> vbYes Then


   Exit Sub
   End If
  End If

TotalSheets = ThisWorkbook.Worksheets.Count
CheckSheet = TextBox1.Value

For i = 1 To TotalSheets
 If LCase(ThisWorkbook.Worksheets(i).Name) = LCase(CheckSheet) Then
   If MsgBox("This Customer Name Already Exists, Choose a different Name", vbQuestion + vbOKOnly) <> vbYes Then


  Exit Sub

 End If
End If


Next
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(ActiveSheet.Name).Name = TextBox1.Value
Worksheets("Invoice").Cells.Copy Worksheets(ActiveSheet.Name).Cells

End Sub 

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

如果所有工作表都具有相同的布局,则最简单的方法是使用具有工作表范围的公式。如果您需要少于2张发票开始,则创建两个虚拟的发票表,所有订单均为空白或零,这样它们就不会影响总数。如果两个哑表分别称为A和B,则在您的主页上创建如下公式:

{
    "key": "IGNORE_VALIDATION_ERROR",
    "value": "true",
    "tags": []
}
{
    "key": "IGNORE_VALIDATION_ERROR",
    "value": "false",
    "tags": []
}

这将对工作表A和B之间的所有工作表上的单元格A1求和。

确保工作表A和B是工作簿的最后两页,然后更改代码以在它们之间插入所有新发票:

=SUM(A:B!A1)

然后隐藏工作表A和B,以使用户看不到它们。您可以使用Visual Basic编辑器中提供的特殊设置来使用户无法取消隐藏它们。在Visual Basic编辑器中,选择工作表,确保“视图”菜单中的“属性”可见,然后将“可见”属性设置为“非常隐蔽”:

enter image description here


另一种方法是修改每个公式的公式字符串以包括新工作表。

答案 1 :(得分:1)

因此,如果我做对了,您将拥有一个名为Production的主工作表,一个名为Invoice的发票模板以及另外两个名为Recipes的工作表和Nav

现在,我假设您没有更多的工作表。

每次创建新客户时,都会基于Invoice模板创建一个新的工作表。您需要一些代码来计算所有单个订单的总和,然后应将其填充在Production表中。

我的建议如下:

Sub updateTotalOrders()
Dim sht As Worksheet
Dim sumOfOrders As Long
sumOfOrders = 0
For Each sht In ThisWorkbook.Worksheets
    If sht.Name <> "Production" And sht.Name <> "Invoice" And sht.Name <> "Nav" Then 'add here any other sheets that should be excluded from the sum
        sumOfOrders = sumOfOrders + sht.Range("C4")
    End If
Next sht
ThisWorkbook.Worksheets("Production").Range("") = sumOfOrders 'Use whichever range you want
End Sub

显然,我提供的代码仅适用于“三明治面包”,但可以轻松扩展为包括所有其他项目。我只是告诉您如何继续。

总而言之,这段代码基本上遍历了所有工作表,并检查它们是否与客户相对应。如果他们这样做,那么它将更新总和。循环停止后,最终结果将传递到Production