Използването на VBA за програмиране на Excel не е толкова популярно, колкото преди. Въпреки това, все още има много програмисти, които го предпочитат, когато работят с Excel. Ако сте от тези хора, тази статия е за вас.
Копиране на ред в Excel VBA е видът, за който Excel VBA е наистина полезен. Например, може да искате да имате един файл от всичките си разписки с дата, акаунт, категория, доставчик, продукт / услуга и цена, въвеждани по един ред в даден момент, когато възникнат - по-скоро случай на развиваща се счетоводна отчетност, отколкото статично счетоводство. За да направите това, трябва да можете да копирате ред от един работен лист в друг.
Примерна програма на Excel VBA, която копира ред от един работен лист в друг - използвайки само три колони за простота, съдържа:
- Алфа колона за текст
- Цифрова колона - на целевия работен лист се създава автоматична сума
- Графа с дата - текущата дата и час се попълват автоматично
Съображения за писане на Excel VBA код
За да задействате събитие, което копира реда, преминете със стандартния - бутон за управление на формата. В Excel щракнете върху Вмъкване в раздела Developer. След това изберете контрола на бутона Бутон и нарисувайте бутона, където искате. Excel автоматично показва диалогов прозорец, за да ви даде възможност да изберете a
макро задействано от събитието за щракване на бутона или за създаване на ново.Има няколко начина да намерите последния ред в целевия работен лист, така че програмата да може да копира ред в долната част. Този пример избира да поддържа номера на последния ред в работния лист. За да поддържате номера на последния ред, трябва да го съхраните някъде. Това може да е проблем, тъй като потребителят може да промени или изтрие номера. За да заобиколите това, поставете го в клетката непосредствено под бутона на формата. По този начин той е недостъпен за потребителя. (Най-лесното нещо е да въведете стойност в клетката и след това да преместите бутона върху нея.)
Код за копиране на ред с помощта на Excel VBA
Sub Add_The_Line () Dim currentRow As Integer Sheets ("Sheet1"). Изберете currentRow = Range ("C2"). Редове за стойност (7) .Select Selection. Копиране на листа ("Sheet2"). Изберете редове (currentRow). Изберете ActiveSheet. Поставете Dim theDate като дата theDate = Сега () Клетки (currentRow, 4) .Value = CStr (theDate) Клетки (currentRow + 1, 3) .Активирайте Dim rTotalCell As Range Set rTotalCell = _ Sheets ("Sheet2"). редове. Брой, "C"). Край (xlUp) .Offset (1, 0) rTotalCell = WorksheetFunction. Сума _ (обхват („C7“, rTotalCell Offset (-1, 0))) Sheets ("Sheet1"). Обхват ("C2"). Value = currentRow + 1 End Sub
Този код използва xlUp, "вълшебно число" или по-технически изброена константа, която се разпознава чрез метода End. Offset (1,0) просто се придвижва нагоре по един ред в същата колона, така че нетният ефект е да изберете последната клетка в колона C.
С думи, в изявлението се казва:
- Отидете до последната клетка в колона C (еквивалентна на End + стрелка надолу).
- След това се върнете обратно към последната неизползвана клетка (еквивалентна на стрелката End + Up).
- След това отидете още една клетка.
Последното изявление актуализира местоположението на последния ред.
VBA вероятно е по-труден от VB.NET, защото трябва да познавате както VB, така и Excel VBA обекти. Използването на xlUP е добър пример за вида специализирани знания, които са от решаващо значение да можете да пишете VBA макроси, без да търсите три различни неща за всяко заявление, което кодирате. Microsoft постигна голям напредък в надграждането на редактора на Visual Studio, за да ви помогне да разберете правилния синтаксис, но редакторът на VBA не се промени много.