Точка этого кода предназначена для ввода пользовательских входов с вкладки «Удалить флаги», в которой пользователь ставит номер позиции и какую программу она принадлежит, фильтрует вкладку «Главный список» по номеру позиции и программу, затем сопоставьте имя флага столбцу и удалите флаг. Однако смещение не работает. Вместо этого он удаляет заголовок. Когда я прохожу через него, все работает нормально, пока строка, отмеченная символом «*******».Устранение неисправностей Код Excel VBA
Я довольно новичок в VBA, и я сам преподаю, поэтому всякая помощь очень ценится. Спасибо вам большое за ваше время.
РЕДАКТИРОВАТЬ: Убрано «При повторном возобновлении поиска дальше» и исправлены некоторые орфографические ошибки. Текущая проблема связана с RNG, не имея> 1 строк, когда ее фильтруют и, безусловно, имеет два ряда (одна строка заголовка, одна строка возвращаемые данные.)
Sub RemoveFlag()
Dim cel As Range
Dim rg As Range
Dim d As Double
Dim i As Integer
Dim m As Integer
Dim n As Integer
Dim rng As Range
Dim wsMaster As Worksheet
Dim wsFlag As Worksheet
Set wsMaster = Worksheets("Master List")
Set wsFlag = Worksheets("Remove Flags")
i = 6
'If there is no data. Do nothing.
If wsFlag.Range("C6") = "" Then
wsFlag.Activate
Else
Application.ScreenUpdating = False
'Add Leading zeroes
wsFlag.Activate
Set rg = Range("C6")
Set rg = Range(rg, rg.Worksheet.Cells(Rows.Count, rg.Column).End(xlUp))
rg.NumberFormat = "@"
For Each cel In rg.Cells
If IsNumeric(cel.Value) Then
d = Val(cel.Value)
cel.Value = Format(d, "000000000000000000") 'Eighteen digit number
End If
Next
'Clear all the filters on the Master List tab.
wsMaster.Activate
If wsMaster.AutoFilterMode = True Then
wsMaster.AutoFilterMode = False
End If
'Loop through all lines of data
Do While wsFlag.Cells(i, 3).Value <> ""
'Filter by the SKU number
wsMaster.Range("A1").AutoFilter Field:=4, Criteria1:=wsFlag.Cells(i, 3).Value
'Filter by the Program
wsMaster.Range("A1").AutoFilter Field:=2, Criteria1:=wsFlag.Cells(i, 2).Value
'If the filter is not empty find the column of the flag
Set rng = wsMaster.UsedRange.SpecialCells(xlCellTypeVisible)
If (rng.Rows.Count > 1) Then
wsMaster.Range("A1:Z1").Find(wsFlag.Cells(i, 4), LookIn:=xlValues).Activate
n = ActiveCell.Column
Sheets("Master List").Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).Select
m = ActiveCell.Row
Cells(m, n) = ""
wsFlag.Activate
wsFlag.Range(Cells(i, 2), Cells(i, 4)).ClearContents
Else
wsFlag.Activate
wsFlag.Range(Cells(i, 2), Cells(i, 4)).Copy
wsFlag.Range("F4").End(xlDown).Offset(1, 0).Activate
ActiveCell.PasteSpecial Paste:=xlPasteValues
wsFlag.Range(Cells(i, 2), Cells(i, 4)).ClearContents
End If
wsMaster.Activate
wsMaster.AutoFilterMode = False
i = i + 1
Loop
'Make sure the entire Master List tab is not highlighted and pull the 'highlighted cell' to A1 in both tabs.
wsMaster.Activate
wsMaster.Range("A1").Activate
wsFlag.Activate
Range("A1").Activate
'Unfreeze the screen
Application.ScreenUpdating = True
End If
End Sub
Что проблема у Вас есть? Какое сообщение об ошибке вы получаете? На какой строке (-ах) возникает проблема? –
Проблема в том, что он не очищает соответствующую ячейку в главном списке. Вместо этого он удаляет заголовок. Это не дает мне ошибку, просто выполняя неправильную задачу. Я думаю, что проблема связана с определением «m», потому что она устанавливает m = 1 вместо того, что было бы уместно (145 в моем тестовом примере, поскольку число, которое я хочу удалить из флага, находится в 145 строке данных). Фильтры применяются правильно, и он находит правильный столбец, он просто очищает неправильную ячейку. Линия обозначается символом «***********» –
У вас есть листы, называемые «Мастер-списком» ',' "Мастер Список« 'и' 'Список Мазеров' '? –