【发布时间】:2021-11-05 04:59:47
【问题描述】:
我需要我的循环来检查现有的零件编号,并且只有在没有现有零件编号的情况下才能将其添加到我的表中。如果部件号已经存在,有一个消息框说明它已经存在。将它添加到我的表中就好了,但如果已经有一个现有的部件号,它不会给我消息框。
Private Sub Add_Click()
Dim ws As Worksheet
Set ws = Sheet4
Dim X As Integer
Dim lastrow As Long
Dim PartColumnIndex As Integer
Dim DescriptionColumnIndex As Integer
Const Part = "CM ECP"
Const Description = "Material Description"
Dim PartNum As String
Dim MaterailDescription As String
Dim tbl As ListObject
Set tbl = ws.ListObjects("Master")
Dim newrow As ListRow
Set newrow = tbl.ListRows.Add
With ws
On Error Resume Next
Let PartColumnIndex = WorksheetFunction.Match(PartNum, .Rows(2), 0)
Let DescriptionColumnIndex = WorksheetFunction.Match(MaterialDecription, .Rows(2), 0)
Let lastrow = .Cells(.Rows.Count, PartColumnIndex).End(xlUp).Row
X = 3
Do
Let PartValue = .Cells(X, PartColumnIndex).Value
Let DecriptionColumnIndex = .Cells(X, DecriptionColumnIndex).Value
If TextBox1.Value = PartValue Then
MsgBox "Part Number " + TextBox1.Value + " already exists. Please try again or return to main screen."
ElseIf TextBox1.Value <> PartValue Then
With newrow
.Range(1) = TextBox1.Value
.Range(2) = TextBox2.Value
End With
ElseIf X < lastrow Then
X = X + 1
End If
Loop Until X > lastrow
End With
【问题讨论】:
-
当您在检查
PartValue的If行上放置断点时,您要比较的值是什么?一个是字符串,另一个不是字符串吗? -
我从来没有将 textbox1 设置为任何东西。它是一个数字,但我想它也可以作为字符串读取。 PartValue 是一个字符串
-
另外,删除
On Error Resume Next,因为这可能隐藏了你不应该忽略的各种问题。 -
@braX - 有点尖锐的评论。你假设每个人都有经验debugging VBA。 OP 在这里是因为他们不知道下一步该做什么......
-
我不同意将任何插件用于开发目的,但这只是我的意见。开始时有一个学习曲线,绕过该曲线以替换为非标准插件(您的同事都没有)可能不是最好的学习方式......当 VBA 新手时,我和无数人其他人发现后期大师Chip Pearson's website 是一个巨大的帮助(例如"Debugging VBA"。也可能是this