Как отправить данные ячейки из шаблона на основной лист в Microsoft Excel? - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю лист управления производством для кафе. на главном листе, называемом «производство», «Производство» имеет новую кнопку клиента, которая создает новые листы и программно копирует шаблон счета-фактуры и вставляет его во вновь созданный лист. все, что я хочу, автоматически отправлять и суммировать итоговую сумму каждого элемента со всех листов на основной производственный лист. Я могу сделать это в целом, но при вставке нового шаблона (во вновь созданный лист) с помощью нажатия кнопки немного сложнее.

 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 ]

1 голос
/ 10 апреля 2019

Итак, если я правильно понял, у вас есть главный рабочий лист с именем 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.

1 голос
/ 10 апреля 2019

Если все листы имеют одинаковую разметку, самый простой способ - использовать формулы с диапазонами листов. Если вам нужно начать с менее чем 2 счетов-фактур, то создайте два фиктивных листа счетов-фактур со всеми Заказами пустыми или нулевыми, чтобы они не влияли на итоги. Если два фиктивных листа называются A и B, создайте формулы, подобные этой, на главной странице:

=SUM(A:B!A1)

Суммирует ячейку A1 на всех листах между листами A и B.

Убедитесь, что листы A и B являются последними двумя листами в вашей рабочей книге, затем измените код, чтобы вставить все новые счета-фактуры между ними:

Sheets.Add before:=Sheets("B")

Затем скройте листы A и B, чтобы пользователи не могли их видеть. Вы можете сделать так, чтобы пользователи не могли их отобразить, используя специальные настройки, доступные в редакторе Visual Basic. В редакторе Visual Basic выберите лист, убедитесь, что Свойства видимы из меню «Вид», затем установите для свойства «Видимый» значение «Очень скрытый»:

enter image description here


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

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