Я относительно новичок в VBA, у меня есть только некоторый опыт работы с Python и очень мало опыта, глядя на другие макросы VBA и корректировка их на мою потребность, поэтому я стараюсь делать все, что в моих силах.Выбор и вставка ячеек
Что я пытаюсь сделать для каждого номера детали, вставленного в рабочий лист B (рабочий лист B, строка A) Я хочу найти тот же номер детали из другого листа, содержащего все номера деталей (рабочий лист D, строка A) и скопируйте описание (рабочий лист D, строка H) из рабочего листа D в другой столбец (рабочий лист B, строка D), затем проверьте следующий номер детали в строке и повторите.
Текущая ошибка, которую я получаю, заключается в том, что существует «Ошибка компиляции: если нет», извините, что я не очень опытный, но любая помощь будет принята с благодарностью.
Другая информация:
-Мой номера деталей для поиска через в рабочем листе B, столбец B заполняется из рабочего листа А, это хорошо, чтобы просто сделать это = A B2 или = CONCATENATE (A B2!)! ?
Sub Description()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, wsD As Worksheet
Dim Rng As Range
Set wsB = Worksheets("B")
Set wsD = Worksheets("D")
Do: aRow = 2
If wsB.Cells(aRow, 2) <> "" Then
With Worksheets("D").Range("A:A")
x = wsB.Cells(aRow, 2)
Set Rng = .Find(What:=x, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
Selection.Copy
wsB.Cells(dRow, 2).Paste
dRow = dRow + 1
Else
aRow = aRow + 1
Loop Until wsB.Cells(aRow, 2) = ""
End Sub
Еще раз спасибо!
Edit: не удается выполнить код в режиме останова является текущая ошибка
Sub Description()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, wsD As Worksheet
Dim Rng As Range
Set wsB = Worksheets("B")
Set wsD = Worksheets("D")
aRow = 2
dRow = 2
Do:
If wsB.Cells(aRow, 1) <> "" Then
With Worksheets("D").Range("A:A")
Set Rng = .Find(What:=wsB.Cells(aRow, 1), _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
Rng.Copy
Rng.Offset(0, 3).Paste (Cells(aRow, 4))
dRow = dRow + 1
aRow = aRow + 1
End With
End If
Loop Until wsB.Cells(aRow, 1) = ""
End Sub
Я считаю, что «End With» непосредственно перед «Else» был бы необходим. На самом деле лучше переместить блок 'With ... End With' за пределами цикла' For ... Next', поскольку он не переопределяется ничем внутри ... для. – Jeeped
Да. В многострочных операторах VBA требуется «End ***» – zmechanic
Я поставил определения aRow и dRow над Do: поэтому он не сбрасывает его каждый раз, когда он петли – Ryan