Защо сумира total_sales и total_commis с натрупване от първия към последния лист?
За упражнение повтарям процедурите в този урок, но имам проблем. В сумарните редове total_sales и total_commis събира стойностите с натрупване от първия към последния лист. Проверих си процедурата с вашата и не виждам разлика, а резултатът е различен.
Option Explicit Type Table_title ime As String sales As Currency commis As Currency End Type
Const Perc1 = 0.15, Perc2 = 0.25
Dim sht As Worksheet Dim total_sales As Long, total_commis As Long Dim total_wsales As Long, total_wcommis As Long Dim last_row As Long Dim sht_nu As Integer, m%, l%, n% Dim array_week() As Week_data Dim array_title
Public Sub Consolidate_data()
sht_nu = ActiveWorkbook.Worksheets.Count
For Each sht In ActiveWorkbook.Worksheets sht.Select last_row = Range("A1").End(xlDown).Row
For m = 2 To last_row
If Range("B" & m) >= 3500 Then Range("C" & m) = Perc2 If Range("B" & m) < 3500 Then Range("C" & m) = Perc1
Range("C" & m).NumberFormat = "0%" Range("D" & m) = Range("B" & m).Range("C" & m) Range("D" & m).NumberFormat = "0$"
Range("D" & m) = Range("B" & m) * Range("C" & m) total_sales = total_sales + Range("B" & m).Value total_commis = total_commis + Range("D" & m).Value
Next m
Range("A" & last_row + 1) = "Общо" Range("B" & last_row + 1) = total_sales Range("D" & last_row + 1) = total_commis
Next sht
Сега забелязах, че и вашата продедура "Fill_Table" работи по същия начин.
total_sales и total_commis натрупват стойностите, защото в процедурата определяме че total_sales = total_sales +......., но след първия лист total_sales пази стойностите и за предходния. Не знам как да дефинирам, че total_sales = само на total_sales от активния лист.
Здравей Цветелина. В урока обръщам специално внимание, че в процедурата има една "особеност". Това е една "уловка" и предизвикателство да се намери причината за некоректното натрупване на сумите. Много добре си се справила с това предизвикателство, точно така стойностите на двете променливи total_sales и total_commmis трябва да натрупват сумите само за активния лист. За следващия лист двете променливи трябва да се нулират, за да започне отново натрупването. Дарина много подробно е отговорила на предишния ти въпрос как променливите съхраняват стойности. За да се нулират или "изчистят" променливите, се присвоява 0. И така, за да сумира само за активния лист, може да добавиш в началото на блок-оператор For each sht, в процедурата Fill_Table следните инструкции: total_sales=0 total_commis=0
Благодаря Ви за отговора.