Как да оправим проблем с VBA Run time error?
Получавам грешка при изпълнение на макроса по стъпки: run tume error 1004 Method Range of object Global failed, може ли някой да ми помогне? Благодаря предварително
Здравейте,
Кода, който се вижда не е причина за тази грешка. Вероятно има по-надолу команда, която я предизвиква. Като натиснете Debug ще видите реда с причината маркиран в жълт цвят. Ако искате направете снимка на другата част от кода и ще се опитам да помогна по-конкретно.
Забелязвам обаче нещо друго:
Определила сте променливи mgs_row и mgs_col, които да съдържат броят редове и колони за таблицата и съответно думите реда и колони.
- Обаче при определяне на съобщението в командата MsgBox сте ги записала като msg_row и msg_col.
По този начин данни за броят редове и колони няма да получите, защото в съобщението използвате празни променливи.
Препоръчвам ви при писането на макроси да използвате опцията Option Explicit. Тя предпазва от подобни технически грешки, тъй като не позволява изпълняването на макрос ако не са дефинирани всички променливи. Също така не позволява дефиниране на променливи с едно и също име.
Опцията Option Explicit може да се зададе като се напише в полето Declarations Option Explicit - показала съм на първата картинка къде се намира полето Declarations.
На втората картинка съм показала как се задава тази опция да се включва автоматично за всеки макрос без да е необходимо да се записва ръчно. Автоматичното й добавяне е валидно за създадените след включването й макроси.
Здравейте, кода е следния:
Sub RowsColumnsCells_New()
row_nu = Range("D7").CurrentRegion.Rows.Count
col_nu = Range("D7").CurrentRegion.Columns.Count
cell_nu = Range("D7").CurrentRegion.Cells.Count
msg = "Таблицата има" msg_row = row_nu & " реда" msg_col = col_nu & " колони" msg_cell = cell_nu & " клетки"
MsgBox msg & vbNewLine & msg_row _ & vbNewLine & msg_col & vbNewLine & msg_cell
Range(Cells(7, 4), Cells(row_nu + 6, col_nu + 3)).ClearFormats
End Sub
т.е. под последния ред е само End Sub, но аз промених настройките както е показано и се получи. Имам един въпрос, как разбрахте, че променливите са празни? Тук: "Забелязвам обаче нещо друго: Определила сте променливи mgs_row и mgs_col, които да съдържат броят редове и колони за таблицата и съответно думите реда и колони. Обаче при определяне на съобщението в командата MsgBox сте ги записала като msg_row и msg_col. По този начин данни за броят редове и колони няма да получите, защото в съобщението използвате празни променливи." Благодаря за помощта отново!
Здравейте, радвам се че нещата са се получили с новия код :)
Относно въпросът ви - вижда се, че променливите са празни, тъй като никъде не бяхте написала mgs_row = ..... и m*gs*_col = ....., т.е. те не съдържат нищо.
След като първия код (на снимката) няма други команди, а в новия сте променила само областта на данните и имената на променливите, то сега се сещам, че възможна причина за показалата се грешка може да бъде ако в един или няколко от следващите редове сте записала "А2" с А на кирилица...
row_nu = Range("A2").CurrentRegion.Rows.Count
col_nu = Range("A2").CurrentRegion.Columns.Count
cell_nu = Range("A2").CurrentRegion.Cells.Count
Ако сте натиснала Debug бутона при появата на грешката в първия код, бихте ли ми казала кой ред се оцвети в жълто (добре ще е да се разбере конкретната причина за появата на грешката в първия код, за да се избягва в бъдеще)?
Здравейте, моят код е зададен по същия начин, но броят на преброените колони/редове/клетки е единица.
row_nu = Range("A1").CurrentRegion.Rows.Count col_nu = Range("A1").CurrentRegion.Columns.Count Cells_nu = Range("A1").CurrentRegion.Cells.Count
Благодаря предварително.
По всяка вероятност Range("A1") е празна клетка над диапазона, за който искате да преброите редовете. Дефинирайте клетка вътре в диапазона, за да използвате CurrentRegion. В примера на Силвия - Range("A2"), a на Валентина - Range("D7"), докато при Вас е Range("A1").
Здравейте, впоследствие открих проблема. Бях го записала така, че да се изпълнява в Sheet, който е празен. Благодаря ви за разяснението!