Здравейте,
Не разбирам как се въвежда формула за сума във VBA ръчно и изобщо за формула, aко не използвам Macro Recorder. Какво значи "=sum (R2C:R(-1)C)".Какво е "R" и какво е "C"? Каво значат цифрите вътре във формулата?
Здравейте Цветелина,
В този урок показвам инструкциите, които записва Macro Recorder в релативен режим - Use Relative References. Инструкциите се записват с Macro Recorder. А в следващия урок показвам още един начин за адресиране в Excel, по-точно какво означава R1C1 :-)
Благодаря за отговора.
Здравейте, Във връзка с изпълнението на макроси total и average: след като изпълня макроса за "total" и след това за "average" ми дава двоен average тъй като сумира два пъти тотала. По отделно процедурите се изпълняват коректно ако изпълня само едната или другата.Търсих си грешката но за сега не мога да я открия. Благодаря
Видях отговора в урок 7,благодаря.
Радвам се, че успяхте сама да откриете причината! Ако имате и други въпроси, не се колебайте и ми пишете.
Здравейте, как мога да променям и дефинирам коя да е active cell, спрямо която се изпълняват другите инструкции?
Здравей, обикновено се използва обект Range с характеристика Cell. Дефинирането на обекти е много важно условие във VBA. В следващия урок има пример, в който показвам как става. И тъй като обект Range e един от най-често използваните обекти във VBA в следващите уроци има много примери.
Надявам се, че успях да отговоря, но ако има нещо неясно, пиши.
Благодаря! На 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")? Дори когато не присъства в инструкцията, макроса пак работи коректно?
Мисля, че сама намерих отговора. При записването с macro recorder в релативен режим, в инструкцията във VBA активната клетка се дефинира с "А1", независимо реално коя клетка е в екселския файл. Дали правилно съм се ориентирала?
Здравейте, Надежда. Точно така. Macro Recorder записва много "ненужни" инструкции, независимо от режима на запис - абсолютен или релативен. Както сама забелязахте, в релативен режим за отместването, например, винаги добавя Range("A1"). След като се запише макрос е добре да се редактира, да се опрости кода. Но преди да изтриете ненужната инструкция, сложете коментар и тествайте. ако макроса се изпълнява без грешка, смело може да изтриете инструкцията.
Благодаря Ви, г-жо Вълкова!
Може ли в подобна ситуацията, в която на мястото на range("b2") да имаме ActiveCell (т.е. да сме избрали клетката в релативен режим) и вместо сумиране да имаме функцията vlookup, с който търсим стойността на activecell от масив от данни? Как бихме могли тогава да дефинираме клетката ActiveCell във функцията vlookup?
Изпратете картинка, за да мога да отговоря конкретно.
Здравейте,
Броят на колоните преди и след колона "Артикул" са различни. Но искам в първата празна клетка от реда с номер на артикула (в случая W5) да има формула като тази посочена със стрелка 3, т.е да търси стойността на артикула от масива в данни от sheet1 и да връща рефериращата на нея стойност в W5.
Здравейте,
Броят на колоните преди и след колона "Артикул" са различни. Но искам в първата празна клетка от реда с номер на артикула (в случая W5) да има формула като тази посочена със стрелка 3, т.е да търси стойността на артикула от масива в данни от sheet1 и да връща рефериращата на нея стойност в W5.
Може да използвате ActiveCell само в процедура - ActiveCell е обект и част от синтаксиса на VBA. Ако правилно разбирам въпроса, искате да напишете процедура, която намира първата празна клетка и в нея да запишете резултата от функция Vlookup. В такъв случай, трябва да дефинирате клетката за резултата. Винаги ли е клетка W5? От какво зависи къде да се запише резултата?
Може да използвате ActiveCell само в процедура - ActiveCell е обект и част от синтаксиса на VBA. Ако правилно разбирам въпроса, искате да напишете процедура, която намира първата празна клетка и в нея да запишете резултата от функция Vlookup. В такъв случай, трябва да дефинирате клетката за резултата. Винаги ли е клетка W5? От какво зависи къде да се запише резултата?
Здравейте, правилно сте ме разбрали, искам да намира първата празна клетка и в нея да се запише резултата с функция vlookup, а стойността, която ще се търси ще бъде точно на 13 клетки отляво. Успях дефинирам първата празна клетка така: Activecell.end(xlright).Select Activecell.offset(0,1).Select Само, че не знам как да се опише тази клетка ActiveCell (това в моя случай е клетка, посочена със стрелка номер 1) с формулата vlookup.
Запишете макрос за Vlookup, за да получите аргументите на функцията. След това за резултата е достатъчно да запишете инструкцията ActiveCell.Offset(0,1)=Vlookup(аргументите от макроса за Vlookup).
Запишете макрос за Vlookup, за да получите аргументите на функцията. След това за резултата е достатъчно да запишете инструкцията ActiveCell.Offset(0,1)=Vlookup(аргументите от макроса за Vlookup).
Запишете макрос за Vlookup, за да получите аргументите на функцията. След това за резултата е достатъчно да запишете инструкцията ActiveCell.Offset(0,1)=Vlookup(аргументите от макроса за Vlookup).
Запишете макрос за Vlookup, за да получите аргументите на функцията. След това за резултата е достатъчно да запишете инструкцията ActiveCell.Offset(0,1)=Vlookup(аргументите от макроса за Vlookup).