Защо макросът не работи?
Каква грешка правя?
Здравейте Валентина, Нека най-напред да уточня дали съм разбрала правилно логиката на програмата. Програмата трябва да изтрие съдържанието на даден диапазон (обект 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
Здравей Деница Григорова, няма значение с коя от двете команди ще търсим последния ред, според мен. Поздрави