Защо сумира total_sales и total_commis с натрупване от първия към последния лист?

Microsoft Excel Електронни таблици Microsoft 365 Excel VBA Програмиране VBA за Excel

За упражнение повтарям процедурите в този урок, но имам проблем. В сумарните редове 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

Благодаря Ви за отговора.


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация