Обект Workbook - най-често използваните команди (methods). Референции за обект Workbook

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

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

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

 
Изберете коректната пълна референция на обект Workbook.
C:\MyDocuments\m3v12_start.xlsm
C:\MyDocuments\m3v12_start
MyDocuments\m3v12_start
 
В какъв формат ще се запише файл "Пример" в инструкцията ActiveWorkbook.SaveAs "Пример"?
Excel Workbook (*.xlsx)
във формата по подразбиране
 
За какво се използва точката на прекъсване (Break point)?
Временно спира изпълнението на процедурата
Извиква други процедури

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

  • Защо файлът не се записва на посоченото от мен място?

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

    Здравейте,

    Изпълнявайки стъпка по стъпка инструкциите от лекцията се опитвам да запиша файла на D:\Excel\VBA Examples. Обаче след изпълнение на процедурата, файлът се записва в Documents на устройство C:, независимо че изрично съм указал съсвем друго място. Опитах да приложа printscrn на проблема, но в полето за задаване на въпрос след прилагане на повече от два printscrn-а става невъзможно дописването на въпроса и/или прилагане на повече printscrns. Опитвах няколко пъти и вече за пети път пиша въпроса си.

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

    Продължавам с тестовете. С процедурата path_example виждам, че местоположението на файл ThisWorbook e D:\Excel\VBA BG. След това в процедура WorkBook_SaveAs_Close добавям ChDir ThisWorkBook.path и след стартиране на процедурата файла "Пример" се записва в C:\Documents. При положение, че пътя е един, защо файла не се записва там?!

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

    Здравей Георги. Точно така, Thisworkbook.Path определя референцията или пътя (папката) на файла, от който се изпълнява процедурата. Но има една особеност папката се намира на устройството D. Обърни внимание устройството по подразбиране е С. Командата ChDir променя само текущата директория, но не и устройството, т.е. търси на устройство С папка VBA BG. Но тъй като на С: няма такава папка, файлът се записва на устройството и директорията по подразбиране, а това е C:\Documents. За да се запише в папка на друго устройство, най-напред трябва да се смени текущото устройство, командата е ChDrive "D" . Обърни внимание, името на устройството е заградено в двойна кавичка. След това команда ChDir ще смени и папката по подразбиране. Надявам се, че отговорих на въпроса ти. Но ако има нещо неясно, пиши.

    Колкото до показване на изображение, аз също имах проблеми и затова най-напред въвеждам текста. След това в ново поле показвам printscrn-a.

  • В какъв формат ще се запише файл "Пример" в инструкцията ActiveWorkbook.SaveAs "I?eia?"

    Светлин Стоянов:

    Здравейте, отново за въпрос от теста към урока, който е в заглавието на въпроса ми. В кавичките на инструкцията трябва да стои "Пример". Видях, че и в работната тетрадка печатната грешка е същата на същия въпрос. Да, подразбира се, но за да подържа курса високото ниво, трябва да изчистим тези грешчици. Само мен ли ме дразнят? :( Поздрави!

  • Как да отворим конкретен лист в активния Woorkbook?

    Viana Conrad:

    Имаме няколко листа в активния файл, как да укажем да се отвори конкретен?

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

    С инструкцията Worksheets("worksheet_name").Select

  • Как от макрос в екселски файл да стартирам макрос в друг екселски файл?

    Peter:

    Здравейте, винаги ми е приятно да се връщам към този курс. Класика в жанра! :) Накратко, искам да направя макрос в екселски файл, който ще извършва групова обработка, наричам го GT. Т.е. имам 3 файла, File1, 2, 3. Всеки път върху тях извършвам повтарящи се действия, състоящи се в стартиране на файла, стартиране на няколко макроса върху него, запомняне, съхраняване. Във файл GT правя макрос, примерно Group_Task, в който се извиква първи файл - File1, извършва се обработка върху File1, чрез извикване на макроси във File1, после File2 и т.н. Тук съм дал схематичен изглед на макроса - https://pastebin.com/4Sz2ijMx

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

    Благодаря, Peter. За да се стартира макрос от друг файл, този файл трябва да се отвори, точно така, имате инструкцията Workbooks.Open "File1" ‘отваря файл. Добавете инструкцията Application.Run "File1.xlsm!NameOfMacroFromFile1", за да се изпълни макроса, записан във File1. Обърнете внимание, трябва да зададете пълното име на файла, с разширението. Тази инструкция трябва да се добави за всеки файл. Споделете, моля, резултата.

    Peter:

    Благодаря, Димитринка, за бързия отговор! Толкова години след провеждане на курса и Вие си го наблюдавате, както и останалите, които сте водила!

    Peter:

    Това решение го видях, още когато публикувах въпроса. Отворих един празен файл, отворих и този, който обработвах, Developer, Macro, записах макрос в който изпълнявам от празния файл макрос в обработвания файл и получих отговора, който и вие сте показала. Проблемът ми се състоеше в това, че когато вкарвах имената на файловеге, които обработвам като променлива в цикъл, задавах имената им с двойни кавички и не работеше. Оказа се, че името трябва да задам - оградено с единични кавички! Това го установих вчера.

    Peter:

    Тук още един въпрос. Как да се направи проверка, дали даден файл е вече отворен, за да се прескочи отварянето, което води до грешка?

    Peter:

    Също така, възможно ли е VBA project да се направи като изпълним/.exe/ файл с оглед увеличаване на бързодействието?

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

    Здравейте, на линка ще намерите примери как да се направи проверка дали файла е отворен https://www.rondebruin.nl/win/s9/win003.htm

    В Excel не може да конвертирате VBAproject в изпълним файл (exe), защото VBAproject се създава на база Excel или друго офис приложение и не може да съществува отделно, самостоятелно. Трябва да използвате VB Studio, C# или друга платформа, които са платени.

    Peter:

    Благодаря! Този Рон няколко пъти ми е попадал, сега вече ще си го запиша като справочник! :)

    Peter:

    И още нещо, което не съм открил. При стартиране на макрос, който работи много дълго време, примерно повече от 5 минути, много често нямам желание да го изчакам да свърши обработката, а искам да прекъсна изпълнението му чрез клавишна комбинация. Това как може да се реализира?

    Peter:

    Намерих някакво решение. Както е казал поетът - Това е толкоз просто и логично ... Натиска се Esc или Ctrl-Break, и в отворилия се прозорец - End. https://wellsr.com/vba/2018/excel/excel-vba-stop-macro-execution-manually-with-esc-or-ctrl-break/

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

    Чудесно е, че сам сте намерили решение. Едно допълнение, клавишите ESC или клавишната комбинация Ctrl+Break, обаче не винаги спират изпълнението на макроса. Тогава на помощ идва класиката Ctrl+Alt+Delete. Неудобството е, че ще загубите направените промени във файла, ако има такива

    Peter:

    Файлът за групова обработка, който създадох, работи с 6 еднотипни файла, стартират се един след друг, завършват със Save, Close. Преди стартиране на следващ файл, програмата прави задръжка 2 секунди. Обаче започнаха да излизат съобщения за недостатъчно памет. Преди започване на работа, заетата памет е 3.2 гб, след завършване на работата на 6-я файл, заетата памет е 7.7 гб, близо до лимита на компютъра ми - 8 гб. След затваряне на всичките ми екселски файлове, заетата памет остава пак толкова и прави трудна работата след работата на файла за групова обработка, решавам го чрез рестарт на компютъра. :-( Накратко, трябва ми оператор за освобождаване на памет преди стартиране на следващ файл. Имам спомен, че имаше нещо казано в уроците тук, погледнах текстовете към уроците, но не видях освобождаване на памет, а ми се струва, че имаше нещо такова описано. Моля за съвет! :-)

    Peter:

    Вероятно, поради използването на глобални променливи . Намерих в един форум някакъв съвет, който вероятно ще ми свърши работа, но излиза съобщение - Compile Error: object required. Предложението е следното:

    use this instruction before use and save instruction-- Set cbrReset = Application.VBE.CommandBars(1).Controls("&Run").Controls("&Reset") cbrReset.Execute cbrReset го дефинирах като стринг и дотук. - Жду ответа, как соловей лето ...:)

    Peter:

    Всъщност, променливата cbrReset трябва да се дефинира като CommandBarButton - Dim cbrReset As CommandBarButton. Идеята е в макроса да се изпълни Project.Reset. Но не ми се получава. Не разбирам, защо след затваряне на файла, уиндоус 10 продължава да поддържа това ниво на заетата памет, би трябвало да я освободи! Явно, почетният шеф на Майкрософт се е вторачил във ваксините и е изпуснал наблюдението над операционната система?! Ето, 10 минути след затваряне на екселския файл, няма нищо друго стартирано, заетата памен си остава същата?!

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

    Това с паметта е много странна работа! Изпратете ме файла на dutoto@gmail.com.

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

    Извинете, имах пред вид изпратете ми файла!

    Peter:

    Благодаря, Димитринка, както винаги - веднага реагира :-) Този проблем ми възникна преди около месец, след като направих файла за групова обработка. Сравнително често ми излизаше съобщение - Out of memory, когато четях по форуми - вероятно поради употреба на глобални променливи, съветите бяха - направете ги локални, но някак ги игнорирах. И днес се престраших да пиша във форума на Аула и както се казва - запалих моторетката. Изчетох какви ли не съвети, повечето обаче бяха от доста отдавна, реших, че не е там ключа ... Накрая видях, в сервизите на таск мениджър, най-отгоре - My Phone. сетих се, че преди около месец инсталирах това приложение на Майкрософт, което линква телефона ви с компютъра, с цел бърз обмен на информация. Това приложение е включено в Sеttins на Майкрософт в уиндоус 10. Преди това свалях данни от телефона чрез кабел или по ftp протокол през Wi-Fi. И така, деинсталирах My Phone на Майкрософт и о Чудо! - нещата заработиха като преди, щях да кажа преди пандемията ... :) За сега това приложение съм набедил и съм го отрекъл, ако ми вярвате - не го ползвайте! Сега паметта се управлява така, както трябва да го правип една уважаваща себе си операционна система. Пуснах и тестове на паметта, включени в контрол панел на уиндоус 10, паметта/на компютъра, не моята/ е наред. Благодаря на Димитринка още веднъж, ако желаете, ще ви пратя файловете /поне 2 броя/. С тях започна практиката ми във VBА for Excel преди 5 години, бях ги изоставил 4 години, тази година, през март месец, нещо се затъжих за VBA, поднових заниманията и ги доразвих, но за сега нямам практически резултати :-) Сигурен съм, че ще имам, след като реших проблема с паметта! :)

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

    Здравейте, Peter. Отговорих на мейла, преди да прочета публикацията във форума. Радвам се, че сте намерили решението. Ще си позволя един съвет, много внимателно избирайте приложенията на Майкрософт! Много често създават странични проблеми и като се замислите не е ясно дали предложеното улеснение компенсира допълнителните проблеми. Успех!