【发布时间】:2017-03-20 11:14:48
【问题描述】:
我是 VBA 新手,遇到了非常糟糕的问题。 我有两个工作表。我必须根据每个客户的地址为他们分配一个销售人员。 在 Sheet1 上,我使用三个数据列,Zip (K)、City (I) 和 Country (L)。 在 Sheet2 上,我在 B 列和 C 列(低值和高值)、城市 (D) 和国家 (E) 中有一个邮政编码范围。每一行都有指定销售人员的姓名。
对代码的要求: 检查客户所在国家/地区是否与第一个销售人员所在国家/地区匹配。 如果是,请检查客户的邮政编码是否在范围内。如果匹配,则将销售人员姓名复制到 Sheet1 并移至下一行。 如果在 Sheet2 上没有给出 Zip 范围作为标准,或者客户的 zip 不匹配,请检查 City 是否匹配,如果匹配,则将销售人员姓名复制到 Sheet1 并移动到下一行。如果 Sheet2 上没有给出城市作为条件或客户所在城市不匹配,请检查国家/地区是否匹配并将销售人员姓名复制到 Sheet1。
到目前为止,如果有的话:
`Sub Territory()
Dim i As Integer
Dim sh1 As Worksheet, sh2 As Worksheet
Dim sh1Rws As Long, sh1Rng As Range, s1 As Range
Dim sh2lowRws As Long, sh2lowRng As Range, s2l As Range
Dim sh2highRws As Long, sh2highRng As Range, s2h As Range
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
Set i = 1
With sh1
sh1Rws = .Cells(Rows.Count, "K").End(xlUp).Row
Set sh1Rng = .Range(.Cells(1, "K"), .Cells(sh1Rws, "K"))
End With
With sh2l
sh2lowRws = .Cells(Rows.Count, "B").End(xlUp).Row
Set sh2lowRng = .Range(.Cells(1, "B"), .Cells(sh2lowRws, "B"))
End With
With sh2h
sh2highRws = .Cells(Rows.Count, "C").End(xlUp).Row
Set sh2highRng = .Range(.Cells(1, "C"), .Cells(sh2highRws, "C"))
End With
For Each s1 In sh1Rng
For Each s2l In sh2lowRng
If s1 > s2l And s1 < s2h Then sh2lowRws.Copy Destination:=Sheet.sh1.Range("u", i)
End If
Set i = i + 1
End Sub`
【问题讨论】:
-
您的两个循环都没有关闭,并且您的
End If不是必需的 - 这是我所看到的最明显的错误......除此之外,无法提供帮助,因为您实际上还没有说代码有什么问题以及错误发生在哪里 -
在分配整数等基本变量时也不要使用
Set(参见set i = ...)。Set关键字仅在分配对象引用时使用。 -
Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") With sh1 sh1Rws = .Cells(Rows.Count, "I").End(xlUp).Row Set sh1Rng = .Range(.Cells(1, "I"), .Cells(sh1Rws, "I")) End With With sh2l sh2Rws = .Cells(Rows.Count, "D").End(xlUp).Row Set sh2Rng = .Range(.Cells(1, "D"), .Cells(sh2Rws, "D")) End With For Each s1 In sh1Rng For Each s2 In sh2Rng If s1 = s2 Then MsgBox "Test" Next s2 Next s1 End Sub -
感谢您看这个!!它不会显示正确的格式...(或者我无法使用该站点:))。我收到此代码的运行时错误 424。我不能执行的操作:复制包含匹配条件的行并创建一个用于 zip 验证的条件