Обект Range - характеристики (properties), които определят броя на редовете и колоните

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

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

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

 
Кое от изброените съдържа само характеристики (properties) за обект Range
rows, row, columns, column, cells
row_nu, row, col_nu, columns, cells
row_nu, col_nu, cell_nu, row, cells
 
Изберете коректната инструкция, която преброява всички колони
col_nu = Range("A1").CurrentRegion.Columns.Count
col_nu = Range("A1").CurrentRegion.Column.Count

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

  • Как да оправим проблем с VBA Run time error?

    Валентина Слабакова:

    Получавам грешка при изпълнение на макроса по стъпки: run tume error 1004 Method Range of object Global failed, може ли някой да ми помогне? Благодаря предварително

    Силвия Данаилова:

    Здравейте,

    Кода, който се вижда не е причина за тази грешка. Вероятно има по-надолу команда, която я предизвиква. Като натиснете Debug ще видите реда с причината маркиран в жълт цвят. Ако искате направете снимка на другата част от кода и ще се опитам да помогна по-конкретно.

    Забелязвам обаче нещо друго:

    1. Определила сте променливи mgs_row и mgs_col, които да съдържат броят редове и колони за таблицата и съответно думите реда и колони.

      1. Обаче при определяне на съобщението в командата 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 бутона при появата на грешката в първия код, бихте ли ми казала кой ред се оцвети в жълто (добре ще е да се разбере конкретната причина за появата на грешката в първия код, за да се избягва в бъдеще)?