Добавяне на сумарен ред под таблица

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

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

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

 
Възможно ли е да се комбинират режимите на запис (релативен и абсолютен) в записа на един макрос ?
Да
Не
 
За да променим характеристиките или за да изпълни действие, най-напред обектът трябва да се избере (Select)
Не, достатъчно е точно да се дефинира
Да, задължително трябва да се избере (Select), както в Excel

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

  • Как се въвежда ръчно формула във VBA

    Cvetelina Raykova:

    Здравейте,
    Не разбирам как се въвежда формула за сума във VBA ръчно и изобщо за формула, aко не използвам Macro Recorder. Какво значи "=sum (R2C:R(-1)C)".Какво е "R" и какво е "C"? Каво значат цифрите вътре във формулата?

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

    Здравейте Цветелина,
    В този урок показвам инструкциите, които записва Macro Recorder в релативен режим - Use Relative References. Инструкциите се записват с Macro Recorder. А в следващия урок показвам още един начин за адресиране в Excel, по-точно какво означава R1C1 :-)


    Cvetelina Raykova:

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

    Мария:

    Здравейте, Във връзка с изпълнението на макроси total и average: след като изпълня макроса за "total" и след това за "average" ми дава двоен average тъй като сумира два пъти тотала. По отделно процедурите се изпълняват коректно ако изпълня само едната или другата.Търсих си грешката но за сега не мога да я открия. Благодаря

    Мария:

    Видях отговора в урок 7,благодаря.

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

    Радвам се, че успяхте сама да откриете причината! Ако имате и други въпроси, не се колебайте и ми пишете.

  • Как мога да дефинирам адреса на active cell?

    Krasy.s:

    Здравейте, как мога да променям и дефинирам коя да е active cell, спрямо която се изпълняват другите инструкции?

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

    Здравей, обикновено се използва обект Range с характеристика Cell. Дефинирането на обекти е много важно условие във VBA. В следващия урок има пример, в който показвам как става. И тъй като обект Range e един от най-често използваните обекти във VBA в следващите уроци има много примери.

    Надявам се, че успях да отговоря, но ако има нещо неясно, пиши.

    Krasy.s:

    Благодаря! На 12 урок мисля, че вече го осъзнах донякъде :) С обект Range и действие.Selection. Прекрасен курс

    Пламен Калинов:

    Здравейте, при този запис: Range("B2").End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-29]C:R[-1]C)" ActiveCell.Select Selection.Copy ActiveCell.Offset(0, 2).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(0, -3).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "sum" ActiveCell.Select макроса се изпълнява коректно независимо къде е кликнато с мишката като клетка в таблицата. Докато при този ако е кликнато на различно място от последен ред втора колона резултата не е коректен: With ActiveCell .Offset(1, 0) = "=SUM(R2C:R[-1]C)" .Offset(1, 2) = "=SUM(R2C:R[-1]C)" .Offset(1, -1) = "Suma" End With Къде бъркам във вторият запис?

    Пламен Калинов:

    Ако се приложи: Range("B2").End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select With ActiveCell .Offset(0, 0) = "=SUM(R2C:R[-1]C)" .Offset(0, 2) = "=SUM(R2C:R[-1]C)" .Offset(0, -1) = "Suma" End With Вече всичко е наред независимо къде по работният лист е кликнато,

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

    Точно така, вярно сте намерил разликата в изпълнението: 1. Range("B2").End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select With ActiveCell .Offset(0, 0) и 2. With ActiveCell .Offset(1, 0) В първия случай Range("B2") - определя клетка B2 - началото на позиционирането, End(xlDown) - определя посоката и последната клетка, в която има някаква стойност. ActiveCell.Offset(1, 0) - определя клетката, в която се въвежда формулата, а това е първата празна клетка. Докато във втория случай формулата се въвежда в активната клетка и затова макросът не се изпълнява коректно.

    Пламен Калинов:

    Може ли малко помощ? Имам колони със сбор, искам ако сбора под някоя колона е 0, колоната да се трие. Дотук какво съм направил: Dim c As Range For Each c In Selection If c.Value > 0 Then ActiveCell.Offset(0, 1).Range("A1").Select If c.Value = 0 Then c.EntireColumn.Delete Next c Не мога да измисля: как да го повтаря докато срещне празна клетка да укажа ако срещне празна клетка да се върни примерно на А1.

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

    На две места във форума сте задали въпроса. Ето отговора:

    http://aula.bg/question#id-144064000001

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

    Ако не се отваря линка, вижте във форума моя отговор на въпроса Ви в темата Как да изтрием редовете, ако предварително не знаем колко са с формули?

  • Какво дефинира Range("A1")?

    Надежда Попниколова:

    Какво е Range("A1")? Дори когато не присъства в инструкцията, макроса пак работи коректно?

    Надежда Попниколова:

    Мисля, че сама намерих отговора. При записването с macro recorder в релативен режим, в инструкцията във VBA активната клетка се дефинира с "А1", независимо реално коя клетка е в екселския файл. Дали правилно съм се ориентирала?

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

    Здравейте, Надежда. Точно така. Macro Recorder записва много "ненужни" инструкции, независимо от режима на запис - абсолютен или релативен. Както сама забелязахте, в релативен режим за отместването, например, винаги добавя Range("A1"). След като се запише макрос е добре да се редактира, да се опрости кода. Но преди да изтриете ненужната инструкция, сложете коментар и тествайте. ако макроса се изпълнява без грешка, смело може да изтриете инструкцията.

    Надежда Попниколова:

    Благодаря Ви, г-жо Вълкова!