在使用VBA中的Dim和Set命令时遇到问题,编译错误“不匹配”

在VBA中编写一个简短脚本来对数据进行sorting,基本上统计input到列表中的名称数量,并将其打印到新列中。 但是,“Set Staff 1”行中的&由于不匹配而导致编译错误。 这似乎是由于同时设置两个范围造成的。 我觉得有一个简单的解决scheme

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 

真的不清楚为什么停止声明在那里。 也许你想退出Do While? 那将是Exit Do

你忘了在Set Staff2 = Range("AD" & i)添加Range ,应该是Set Staff2 = Range("AD" & i)

另外,不要忘记通过使用Set Staff2 = Nothing来释放你的对象

你也忘了closures你的大部分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