Здравейте Валентина, Нека най-напред да уточня дали съм разбрала правилно логиката на програмата. Програмата трябва да изтрие съдържанието на даден диапазон (обект Range). За тази цел с променливата last_row определяте последния ред. След това за всяка клетка (rng) изтривате съдържанието. Според мен е излишно да се избира клетката (Select), а след това да се изтрива. Достатъчно е обектът да се дефинира правилно и след това да се зададе команда (method). Блок-операторът With ... End With също не е необходимо да се повтаря.
Ето моето предложение:
Sub Delete_Content_New()
Dim sht As Worksheet Dim rng As Range Dim last_row As Long Dim i, j
For Each sht In ActiveWorkbook.Worksheets sht.Activate
i = 2 j = 4
last_row = Range("A1048576").End(xlUp).Row
For Each rng In Range(Cells(i, j), Cells(last_row, j)).Cells rng.ClearContents rng.Offset(0, 2).ClearContents
Next rng
End Sub
Надявам се, да свърши работа. Ако имате още въпроси, пишете ми.
Здравейте и благодаря за отговора, имам два въпроса, защо обявяваме втори път sht тук: For Each sht In ActiveWorkbook.Worksheets SHT.Activate И защо използваме два пъти Clear Content тук: For Each rng In Range(Cells(i, j), Cells(last_row, j)).Cells rng.CLEARCONTENTS rng.Offset(0, 2).ClearContents? Благодаря предварително!
При копиране инструкциите се разместват, а аз не съм обърнала внимание. Ето каква е последователността:
Sub Delete_Content_New()
Dim sht As Worksheet
Dim rng As Range
Dim last_row As Long
Dim i, j
For Each sht In ActiveWorkbook.Worksheets
sht.Activate '==> всеки лист от колекцията Worksheets трябва да се активира
i = 2
j = 4
last_row = Range("A1048576").End(xlUp).Row
For Each rng In Range(Cells(i, j), Cells(last_row, j)).Cells
rng.ClearContents
rng.Offset(0, 2).ClearContents '==> изтрива съдържанието за още една клетка !!!
Next rng
End Sub
Надявам се сега вече да е по-ясно! Но ако имате въпроси пишете!
Здравейте и благодаря, имам още един въпрос, защо отново използваме командата CELLS с главни букви? For Each rng In Range(Cells(i, j), Cells(last_row, j)).CELLS Благодаря предварително!
Имам още един въпрос, как мога да направя макро да тествам vlookup от друг файл с ежедневно променящо се име?
Обект Range дефинира диапазон, а диапазонът се дефинира с 2 две клетки. Например: Range("A1:B10"). Във VBA може да дефинирате диапазон като се включи и обект CELLS, например: Range(Cells(1,1), Cells(10,2). Във макроса Range(Cells(i,j), Cells(last_row,j)). След точката CELLS определя колекцията (Collection), която се съдържа в дефинирания вече обект Range, защото обект Range има и други колекции ROWS, COLUMNS и т.н. Прегледайте още веднъж урок 7 от модул 3.
Благодаря!
Прав е Цукев, че от Въпроси и отговори също се научава, даже повече.
Благодаря за интересния урок! А защо намираме последната клетка с Range("A1048576").End(xlUp).Row вместо с: Range("a1").End(xlDown).Select last_row = ActiveCell.Row
Здравей Деница Григорова, няма значение с коя от двете команди ще търсим последния ред, според мен. Поздрави
Може ли да задам команда, с която да изтривам съдържанието в скритите листи? Създал съм макрос, с който в зависимост от стойност в клетка в лист1, скривам други пет листа и показвам шести.
Може, разбира се. Просто трябва да се покажат скритите листове, да се изтрие каквото трябва да се изтрие и пак да се скрият
Това го знам, но търсих друг вариант.
Данните от скритите листове могат да се изтрият и без да се показват (Unhide) като използвате характеристиката (property) Visible=False на обекта Worksheet. В примера използвам променлива wks за обекта Worksheet: If wks.Visible = False Then wks.Cells.ClearContents. За wks.Visible може да се изберат и константите: wks.Visible = xlSheetHidden wks.Visible = xlSheetVeryHidden wks.Visible = xlSheetVisible
Ако имате още въпроси, пишете.
Благодаря! Получи се.
Здравейте г-жо Вълкова. Какъв е смисълът на различните библиотеки (ексел, VbA) във връзка със създаването на код? И може ли в тази библиотека по обратен път да търся, да речем по характеристика, за да разбера кой е обекът, към който тя е приложима? Ще споделя елементарна задача, опитах се да форматирам през VBA една клетка да се визуализира като дата. Дадох ActiveCell. , после с контрол и шпация излезе падащото меню и избрах Format, отново шпация, падащо меню, избрах Date, но при проиграване на кода ми даде, че този обект не поддържа тази х-ка или метод. Как ефективно бих могла да използвам в тоззи случай библиотеката?
Здравейте, Гергана. Библиотеките (Libraries) имат много полезна информация за синтаксиса на елементите във VBA. Още един полезен инструмент е F1 за допълнителна помощна информация, в модул 3 показвам как се използват. Когато се получава грешка в синтаксиса, най-лесният начин е да се запише макрос. Генерираният код с Macro Recorder винаги е точен, помага да се види коректния синтаксис. Във Вашия случай препоръчвам да запишете макрос, с който избирате желания формат. Ако имате още въпроси, пишете.
Здравейте госпожо Вълкова, защо не въведохме променливите total comis & total sales със "as" като някакъв тип данни? Кога стигаме до пълното дефиниране на променливите като тип данни и кога спираме само до въвеждане на името им?
Когато променливата се декларира с оператор Dim без да се посочи какъв тип данни съхранява (с оператор As), по подразбиране компилаторът приема тип Variant, т.е. може да съхранява текст и числа. Това ще стане чсно в следващия урок, но както разбирам от въпросите Вие веше сте го изгледали.