У вас возникли проблемы с командой Dim и Set в VBA, скомпилируйте ошибку «несоответствие»,

Написание короткого сценария в VBA для сортировки данных, в основном подсчета количества имен, внесенных в список, и их печати в новый столбец. Однако & в строке «Установить персонал 1» вызывает ошибку компиляции из-за несоответствия. Кажется, это вызвано установкой двух диапазонов одновременно. У меня создается впечатление, что есть прямое решение …

Sub Staffing() Dim Rng As Range Dim i As Long Dim Staff1 As Range Dim Staff2 As Range Dim Staff3 As Range Dim Staff4 As Range Dim Staff5 As Range Dim Staff6 As Range Dim Staff7 As Range While i <= 300 Set Rng = Range("J" & i) Set Staff1 = ("X" & i) Set Staff2 = ("AD" & i) Set Staff3 = ("AJ" & i) Set Staff4 = ("AP" & i) Set Staff5 = ("BB" & i) Set Staff6 = ("BH" & i) Set Staff7 = ("BN" & i) If Staff1 <> "" Then Rng.FormulaR1C1 = "0" i = i + 1 If Staff2 <> "" Then Rng.FormulaR1C1 = "1" i = i + 1 If Staff3 <> "" Then Rng.FormulaR1C1 = "2" i = i + 1 If Staff4 <> "" Then Rng.FormulaR1C1 = "3" i = i + 1 If Staff5 <> "" Then Rng.FormulaR1C1 = "4" i = i + 1 If Staff6 <> "" Then Rng.FormulaR1C1 = "5" i = i + 1 If Staff7 <> "" Then Rng.FormulaR1C1 = "6" i = i + 1 Else Stop End If Wend End Sub 

Заранее спасибо!

Спасибо за терпение каждого. У меня были сумасшедшие ОГРОМНЫЕ ошибки при написании этого первого кода, но они исправили их благодаря вашей помощи и некоторых моих собственных проб и ошибок. Правильный код выглядит следующим образом. Я уверен, теперь вы сможете увидеть, что я пытаюсь сделать!

 Sub StaffingNumbers() Dim Rng As Range Dim i As Long Dim Staff1 As Range Dim Staff2 As Range Dim Staff3 As Range Dim Staff4 As Range Dim Staff5 As Range Dim Staff6 As Range Dim Staff7 As Range Dim Staff8 As Range Dim Staff9 As Range Dim Staff10 As Range i = 3 While i <= 300 Set Rng = Range("J" & i) Set Staff1 = Range("X" & i) Set Staff2 = Range("AD" & i) Set Staff3 = Range("AJ" & i) Set Staff4 = Range("AP" & i) Set Staff5 = Range("AV" & i) Set Staff6 = Range("BB" & i) Set Staff7 = Range("BH" & i) Set Staff8 = Range("BN" & i) If Staff1 = "" Then Rng.FormulaR1C1 = "0" i = i + 1 ElseIf Staff1 <> "" And Staff2 = "" Then Rng.FormulaR1C1 = "1" i = i + 1 ElseIf Staff2 <> "" And Staff3 = "" Then Rng.FormulaR1C1 = "2" i = i + 1 ElseIf Staff3 <> "" And Staff4 = "" Then Rng.FormulaR1C1 = "3" i = i + 1 ElseIf Staff4 <> "" And Staff5 = "" Then Rng.FormulaR1C1 = "4" i = i + 1 ElseIf Staff5 <> "" And Staff6 = "" Then Rng.FormulaR1C1 = "5" i = i + 1 ElseIf Staff6 <> "" And Staff7 = "" Then Rng.FormulaR1C1 = "6" i = i + 1 ElseIf Staff7 <> "" And Staff8 = "" Then Rng.FormulaR1C1 = "7" i = i + 1 ElseIf Staff8 <> "" Then Rng.FormulaR1C1 = "8" i = i + 1 Else Stop End If Wend Set Rng = Nothing Set Staff1 = Nothing Set Staff2 = Nothing Set Staff3 = Nothing Set Staff4 = Nothing Set Staff5 = Nothing Set Staff6 = Nothing Set Staff7 = Nothing End Sub 

Вы пропустили Range в этой строке, первая строка с установленным Set Rng = Range("J" & i) верна, все остальные тоже должны быть похожи.

Логика того, что вы хотите выполнить после назначения диапазона, не ясна. Возможно, это именно то, что вы надеетесь перерезать.

 Dim i As Long Dim Staff1 As Range, Staff2 As Range, Staff3 As Range Dim Staff4 As Range, Staff5 As Range, Staff6 As Range Dim Staff7 As Range, Rng As Range While i <= 300 Set Rng = Range("J" & i) Set Staff1 = Range("X" & i) Set Staff2 = Range("AD" & i) Set Staff3 = Range("AJ" & i) Set Staff4 = Range("AP" & i) Set Staff5 = Range("BB" & i) Set Staff6 = Range("BH" & i) Set Staff7 = v("BN" & i) If Staff1 <> "" Then Rng.FormulaR1C1 = "0" i = i + 1 ElseIf Staff2 <> "" Then Rng.FormulaR1C1 = "1" i = i + 1 ElseIf Staff3 <> "" Then Rng.FormulaR1C1 = "2" i = i + 1 ElseIf Staff4 <> "" Then Rng.FormulaR1C1 = "3" i = i + 1 ElseIf Staff5 <> "" Then Rng.FormulaR1C1 = "4" i = i + 1 ElseIf Staff6 <> "" Then Rng.FormulaR1C1 = "5" i = i + 1 ElseIf Staff7 <> "" Then Rng.FormulaR1C1 = "6" i = i + 1 Else Stop End If Wend 

На самом деле неясно, почему существует оператор Stop . Возможно, вы хотите выйти из Do Do? Это будет Exit Do

Вы забыли добавить Range в Set Staff2 = Range("AD" & i) который должен быть Set Staff2 = Range("AD" & i)

Кроме того, не забудьте освободить свои объекты в конце proc, используя Set Staff2 = Nothing

Вы также забыли закрыть большинство своих операторов If с помощью End If , я разрешил это, потому что я не знаю, что вы хотите сделать с вашим кодом:

 Sub Staffing() Dim Ws As Worksheet Dim Rng As Range Dim i As Long Dim Staff1 As Range Dim Staff2 As Range Dim Staff3 As Range Dim Staff4 As Range Dim Staff5 As Range Dim Staff6 As Range Dim Staff7 As Range i = 1 Set Ws = ThisWorkbook.Sheets("SheetNameHere") While i <= 300 With Ws Set Rng = .Range("J" & i) Set Staff1 = .Range("X" & i) Set Staff2 = .Range("AD" & i) Set Staff3 = .Range("AJ" & i) Set Staff4 = .Range("AP" & i) Set Staff5 = .Range("BB" & i) Set Staff6 = .Range("BH" & i) Set Staff7 = .Range("BN" & i) End With If Staff1.Value <> "" Then Rng.FormulaR1C1 = "0" i = i + 1 If Staff2 <> "" Then Rng.FormulaR1C1 = "1" i = i + 1 If Staff3 <> "" Then Rng.FormulaR1C1 = "2" i = i + 1 If Staff4 <> "" Then Rng.FormulaR1C1 = "3" i = i + 1 If Staff5 <> "" Then Rng.FormulaR1C1 = "4" i = i + 1 If Staff6 <> "" Then Rng.FormulaR1C1 = "5" i = i + 1 If Staff7 <> "" Then Rng.FormulaR1C1 = "6" i = i + 1 Else Stop End If Wend Set Ws = Nothing Set Rng = Nothing Set Staff1 = Nothing Set Staff2 = Nothing Set Staff3 = Nothing Set Staff4 = Nothing Set Staff5 = Nothing Set Staff6 = Nothing Set Staff7 = Nothing End Sub 
Давайте будем гением компьютера.