使用条件 Copy/Paste 执行 While 循环 - Excel VBA - 代码不工作
Do While Loop with Conditional Copy/Paste - Excel VBA - Code not working
我有一组复杂的要求,正在尝试开发一段合适的 Excel VBA 代码。我是一个初学者,所以任何关于这个问题的建议都将不胜感激。
CONTEXT:"Company A" sheet 列出了部门、薪级表和职务(A-C 列)。 "Company B" sheet 列出了他们工作的所有上述内容,但还在 D 和 E 列中指定了每个工作是否与公司 A 的工作(D 列)相匹配,如果是,则匹配哪一个( E 列),或者是否没有匹配项,然后 E 列单元格为空。
AIM:我想将公司 B 中的工作与公司 A 中的工作相匹配,并且 copy/paste 那些匹配公司 B 的工作到 "Company A" sheet 作为 D-F 列中的链接但是有是个问题!
问题:在每家公司中,有多个职位具有相同的部门-薪酬等级-职位组合,并且这些数字在公司之间不匹配,例如A 公司有 4 个工作,但 B 公司只有 3 个匹配的工作。我希望我的代码知道只复制 B 公司的工作三次并将第四行留空(以直观地指示三个匹配的工作和第四个没有匹配)。为实现这一目标,我有每个公司每个部门中相同薪酬等级的工作数量,并希望将这些数字用作我的 Do While 循环的计数器。
我写的代码:
Private Sub CommandButton6_Click()
Dim counter As Integer
Dim myNum As Integer
a = Worksheets("COMPANYB").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("JobNumbers").Range("D:D").Value = counter
Worksheets("JobNumbers").Range("C:C").Value = myNum
Do While counter < myNum
For i = 2 To a
If Worksheets("COMPANYB").Range("D" & i).Value = "Match" And _
Worksheets("COMAPNYB").Range("E" & i).Value = Worksheets("COMPANYA").Range("C" & i).Value Then
Worksheets("COMPANYB").Range("A" & i & ":C" & i).Copy
Worksheets("COMPANYA").Activate
b = Worksheets("COMPANYA").Range("D" & Rows.Count).End(xlUp).Offset(0, 3).Row
Worksheets("COMPANYA").Range("D" & b + 1).Select
ActiveSheet.Paste Link:=True
End If
Next i
counter = counter + 1
myNum = myNum - 1
Loop
End Sub
...但不是工作,它只是将所有 0 放入我的 "JobNumbers" sheet 列中,我希望它使用我的计数器和 myNum 来设置 Do 的测试而循环。
如您所见,我什至没有完成我想做的 'leave the rows blank when copying' 事情,因为我非常坚持这一点。我也开始怀疑我是否对 VBA...
期望不高
我知道这是很多文字,我深表歉意 - 非常感谢feedback/help,谢谢!
=
是赋值运算符。它在列中的每个单元格中写入“0”的原因是因为 Worksheets("JobNumbers").Range("D:D").Value
指的是整个列 D 中的每个单元格。然后您将 =
变量 counter
分配给所有这些单元格通过写 Worksheets("JobNumbers").Range("D:D").Value = counter
在此之上,您将 counter
定义为整数,但未为其分配值 =
,因此它开始为空且不会更改。分配给单元格值的空整数将使该单元格保留为 0。
我有一组复杂的要求,正在尝试开发一段合适的 Excel VBA 代码。我是一个初学者,所以任何关于这个问题的建议都将不胜感激。
CONTEXT:"Company A" sheet 列出了部门、薪级表和职务(A-C 列)。 "Company B" sheet 列出了他们工作的所有上述内容,但还在 D 和 E 列中指定了每个工作是否与公司 A 的工作(D 列)相匹配,如果是,则匹配哪一个( E 列),或者是否没有匹配项,然后 E 列单元格为空。
AIM:我想将公司 B 中的工作与公司 A 中的工作相匹配,并且 copy/paste 那些匹配公司 B 的工作到 "Company A" sheet 作为 D-F 列中的链接但是有是个问题!
问题:在每家公司中,有多个职位具有相同的部门-薪酬等级-职位组合,并且这些数字在公司之间不匹配,例如A 公司有 4 个工作,但 B 公司只有 3 个匹配的工作。我希望我的代码知道只复制 B 公司的工作三次并将第四行留空(以直观地指示三个匹配的工作和第四个没有匹配)。为实现这一目标,我有每个公司每个部门中相同薪酬等级的工作数量,并希望将这些数字用作我的 Do While 循环的计数器。
我写的代码:
Private Sub CommandButton6_Click()
Dim counter As Integer
Dim myNum As Integer
a = Worksheets("COMPANYB").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("JobNumbers").Range("D:D").Value = counter
Worksheets("JobNumbers").Range("C:C").Value = myNum
Do While counter < myNum
For i = 2 To a
If Worksheets("COMPANYB").Range("D" & i).Value = "Match" And _
Worksheets("COMAPNYB").Range("E" & i).Value = Worksheets("COMPANYA").Range("C" & i).Value Then
Worksheets("COMPANYB").Range("A" & i & ":C" & i).Copy
Worksheets("COMPANYA").Activate
b = Worksheets("COMPANYA").Range("D" & Rows.Count).End(xlUp).Offset(0, 3).Row
Worksheets("COMPANYA").Range("D" & b + 1).Select
ActiveSheet.Paste Link:=True
End If
Next i
counter = counter + 1
myNum = myNum - 1
Loop
End Sub
...但不是工作,它只是将所有 0 放入我的 "JobNumbers" sheet 列中,我希望它使用我的计数器和 myNum 来设置 Do 的测试而循环。 如您所见,我什至没有完成我想做的 'leave the rows blank when copying' 事情,因为我非常坚持这一点。我也开始怀疑我是否对 VBA...
期望不高我知道这是很多文字,我深表歉意 - 非常感谢feedback/help,谢谢!
=
是赋值运算符。它在列中的每个单元格中写入“0”的原因是因为 Worksheets("JobNumbers").Range("D:D").Value
指的是整个列 D 中的每个单元格。然后您将 =
变量 counter
分配给所有这些单元格通过写 Worksheets("JobNumbers").Range("D:D").Value = counter
在此之上,您将 counter
定义为整数,但未为其分配值 =
,因此它开始为空且不会更改。分配给单元格值的空整数将使该单元格保留为 0。