Как да оптимизираме записаните инструкции на VBA – редактиране на макроса

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

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

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

 
За да променим характеристиките на даден обект, най-напред задължително трябва да го изберем 
Вярно
Не е вярно

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

  • Защо не излиза списъкът с характеристиките

    Весела Костадинова:

    <

    p>Защо понякога като напиша точка, не ми излиза списъкът с характеристиките. Пробвах го няколко пъти - понякога излиза, понякога - не. Даже в един и същи файл, но в различни модули.

    Дарина Иванова:

    Причина за това би могло да е неправилното изписване на името на обекта. То може да се види или копира от свойство (Name). Всички имена на обекти могат да се видят от списъка под заглавната лента Properties.

    Димитринка:

    Това е едната причина. От друга страна не винаги компилаторът успява да разпознае обекта и съответно да изведе този автоматичен списък.

    Весела Костадинова:

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

    Свалих пак файла m1v10_start и направих всичко като в урока. Не ми се появява списъкът когато в макроса CopyFormula вмъкна Sheets("Sheet1") в командата With Range("D3:G9").Font  и изтрия за проба Font:

    With Sheets("Sheet1").Range("D3:G9").

    Дали нещо не ги изписвам както трябва или просто програмата не го разпознава?


     

    Дарина Иванова:

    Ако напишете целия фрагмент можем да преценим по-лесно какъв е проблемът. Така написаната команда според мен се разбира по следния начин: "Със зона D3:G9 на лист Sheet1 от Sheets". На мен ми звучи незавършено. Очаквам да се поясни какво да се направи с тази зона. 


    Весела Костадинова:

    Първоначално вариантът е така и той работи (ако изтиря Font и после искам да  го въведа отново, след като напиша точката се появява списъкът):

    With Range("D3:G9").Font

            .Name ="Cambria"

             .Size = 14

    End With

    След това искам да кажа укажа, че този Range("D3:G9") е в Sheet1. Затова го вмъквам Sheets("Sheet1") преди Range("D3:G9") така:


     With Sheets("Sheet1").Range("D3:g9").

    .Name = "Cambria"

             .Size = 14

    End With



    И тогава не се пявява списъкът.


    Димитринка:

    Здравейте, Весела. Сигурна съм, че вече сама сте открили причината. Точно така в блок-оператор With не е зададен Font и затова не се показва автоматично този списък. Целта на упражненията в този модул е да "четете" инструкциите, записани с Macro Recorder и да ги редактирате. Отначало може да Ви се струва дори досадно повтарянето на тези инструкции, които показвам. Но този начин помага да разбирате инструкциите, т.е. синтаксиса на VBA. А в следващите модули подробно разглеждам инструментите в редактора на VBA, включително и техники за използване на автоматичния списък и разбира се и други още по-интересни неща. Успех!

    Дарина Иванова:

    Всъщност списъкът се появява в With, но когато се добавят Sheets("Sheet1") вече трябва да се изпише, но също работи.


    Весела Костадинова:

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

    Димитринка:

    Весела, продължавайте все така настоятелно и упорито! А аз съм насреща, всеки път когато Ви трябва помощ :-)

    Cvetelina Raykova:

    Здравейте, имам проблем с редактирането на кода. След като направя редакцията на кода ми изписва грешка и не мога да разбера защо.
    Моля вижте грешката. Опитах няколко пъти като започвах отначало,но грешката е една и съща.

    Cvetelina Raykova:

    Изпращам пак print screen, за да се види целият ред с кода.

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

    Здравейте Цветелина,

    Проблемът при редактирането е, че липсва интервал след Copy
    Ето какво трябва да запишете:

    Sheets("Лист1").Range("A3").Copy Sheets("Лист3").Range("C3:M15").

    Cvetelina Raykova:

    Благодаря за отговора. Надявам се по-нататък в курса да се говори за синтаксиса,правилата за изписване. До тук споменахте правила за главните букви, латиница, кавички, но явно трябва още. Иначе курсът е доста разбираем  и достъпен. Обяснявате много добре.

    Георги Ангелов:

    Здравейте,

    Редактирам кода за CopyFormula точно както е описано в лекцията:

    но като резултат всеки път получавам тази празна таблица:

    При положение, че няма никаква разлика в кодовете защо при мен не се получава резултата от лекцията?

    Георги Ангелов:

    Имах в предвид кода за ConvertFormula ....

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

    Здравей Георги. Зависи какво копираш. На изображението не се вижда диапазона, който копираш. В процедурата ConvertFormula копирам диапазон на Sheet1, в който има стойности. Провери следното: 1. Дали диапазонът, който искаш да копираш е този, който си дефинирал. 2. Сигурен ли си, че използваш Paste Special Value? Надявам се тези насоки да ти помогнат. Пиши ми, ако копирането продължава да не се получава.

    Георги Ангелов:

    Намерих си грешката - резултата се възпроизвежда в sheet 2, а това с празната таблица е в sheet1. Но искам да попитам друго. Как разбираме кои точно команди от кода са излишни, защото ако кода е по-дълъг не можем непрекъснато на принципа проба-грешка да маркирам като коментари различни части от кода и да пускам макроса непрекъснато. Това би ми отнело много време. И още един въпрос - има ли някаква клавишна комбинация (и каква е тя) която премахва автоматично привежда кода в следния вид: Sheets("Sheet1").Range("A3").Copy Sheets("Sheet1").Range("D3:G9") т.е. премахва думата select/selection, защото забелязах, че в урока лекторката го направи за секунди това премахване и кода придоби вида: Sheets("Sheet1").Range("A3").Copy Sheets("Sheet1").Range("D3:G9")

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

    Това за излишните команди е въпрос на практика. Целта на тези уроци е да разбираш, да "четеш" кода, който се генерира записва с MacroRecorder. Както и да се редактира кода, да се премахват излишните инструкции. В уроците на курса разглеждам синтаксиса на VBA и ще се научиш как да пишеш инструкции, нали това е целта на курса. А преподавателката ще ти покаже и други интересни и полезни трикове :-). Само трябва да следваш уроците!