Как да дефинираме обект Range - блок-оператор While

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Тест за преминаване към следващия урок

 
Блок-оператор While изпълнява повтарящи се действия (Loop)
Твърдението е вярно
Твърдението НЕ е вярно
 
Каква грешка е допусната в блок-оператор While?Sub Test_While()i=2While Not IsEmpty(Cells(i, 1))Cells(i, 1).Selecti= i + 1End Sub
липсва Wend
променливата [i] не е дефинирана
няма грешка
 
Изберете правилната инструкция за присвояване на стойност на обект Range
Range("B4") = total_sales
total_sales = Range("B4")

Въпроси и отговори

  • Кое е оптималното решение на домашната задача?

    Petko Ivanov Stoyanov:

    Здравейте, искам да ви представя моето частично решение на домашната задача, в която трябва да изчислим комисионната за всеки ред на последната колона и да сметнем общата сума: Sub Komisionna() i = 2 j = 4

    While IsEmpty(Cells(i, j))

    Cells(i, j) = Cells(i, j - 2) * Cells(i, j - 1) i = i + 1 Wend

    'Cells(i, j) = "=SUM(Cells(i-9,j):Cells(i-1,j)"

    End Sub

    Последният ред от макрото е в коментар, понеже не работи и "бъгва" едитора, но не мога да си обясня защо, съответно бих желал да науча алтернативен метод за използване само на клетки с елементи i, j. Допълнително бих се радвал да видя цели чужди решения на домашната задача, за да видя Вашия начин на мислене :) Благодаря предварително!

    Petko Ivanov Stoyanov:

    Видях отговора в следващото видео. Не съобразих, че ще бъде представен там, както и че трябва да се използват променливи за съхраняване. :)

    Димитринка Вълкова:

    Здравей, решението, което предлагам е свързано с темата на урока. Разбира се, че могат да се намерят и други решения. Вярното решение е това, което дава коректен резултат. Грешката в кода, който си написал, е в дефинирането на обект Range за сумата. В предишните уроци показах макроси, които записват въвеждане на екселски функции - SUM, AVERAGE (виж урок 6 от модул 2). Или запиши макрос, в който въвеждаш функцията SUM, така веднага ще видиш грешката. Във VBA също се използват вградените екселски функции, но има различен синтаксис и ги разглеждам в следващите модули. Използването на променливи е много важно, за да се научи VBA. Надявам се, че успях да отговоря на въпроса ти.

  • Какъв е проблемът в кода за сумиране на комисионната?

    Gergana Miteva:

    Здравейте госпожо Вълкова, След като заложих да калкулира ред по ред комисионната искам да заложа да я сумира с While (ако има ст/ст в колоната за комисионните - запази ст/стта и я добави към вече запазената), но ми дава нула. Нещо не е наред в кода.

    Димитринка Вълкова:

    Проблемът е в променливата за реда (i), във втория блок-оператор While. В първия блок-оператор While се изчислява комисионната, докато не срещне празна клетка и за всеки ред променливата (i) се увеличава с 1. Когато завърши блок-оператора, променливата (i), съхранява последната увеличена стойност, но тя е различна от първоначалната стойност i=2. Ако в таблицата има 20 реда, тя ще бъде 22, например. Тогава за втория блок-оператор While, променливата започва от 22-ри ред While Not IsEmpty(Cells(i,j)) няма стойности и затова резултатът е 0. Проблемът може да се реши по два начина: 1. Да остане само един блок-оператор While, като след инструкцията за изчисляване на комисионната, се добави инструкцията: Total_commiss = Total_commiss + Cells(i,j) 2. Преди втория блок-оператор While да се зададе първоначалната стойност на променливата i=2. Аз предпочитам първия вариант.

    Пишете, ако имате още въпроси.