excel - if then else语句在vba excel中完全相同
问题描述
我试图找出代码有什么问题,但我不能。在第一个 if 语句中,我想说如果移动是 ADD 并且如果工作表 1(DataEntry)的 3 个单元格与工作表 2(目录)的 3 个单元格相等,则不要输入,否则如果它们不相等则执行。在这两种情况下,它都会输入,因此我有重复项。任何人都可以帮忙吗?
ps:如果我删除 elseif 并且我只有 if 那么它会显示消息。
更新(2020 年 1 月 24 日):昨天一切正常。几分钟前,我意识到当我在单元格 A、B、C 中键入一个希腊词时,例如“φίλτρο”“νερού”“κ.π”。excel无法识别。即使看起来试图在目录表上输入数据也没有发生任何事情,也没有出现。虽然奇怪的事情正在发生。有时一切正常(希腊人除外),有时会出现错误的消息框。并继续运行并显示消息,即使我单击确定然后 excel 崩溃。“我头晕了”,我想不清楚。
Sub AddChange()
Dim t1, t2, t3, t4, t5, t6
Dim t10, t11, t12, t13, t14, t15
Dim t18, t19, t20, t21, t22, t23
Dim arrayData As Variant
Dim arrayData2 As Variant
Dim cleanData As Range
Dim keli As Range
Dim baseSheet As Object
Dim formaSheet As Object
Dim Stock As Object
Dim meter As Long
Dim meter2 As Long
Dim Movement As String
Dim i As Integer
Set Stock = Sheets("StockMovements")
Set baseSheet = Sheets("Catalogue")
Set formaSheet = Sheets("DataEntry")
Set t1 = formaSheet.Range("A6")
Set t2 = formaSheet.Range("B6")
Set t3 = formaSheet.Range("C6")
Set t4 = formaSheet.Range("D6")
Set t5 = formaSheet.Range("E6")
Set t6 = formaSheet.Range("F6")
Set t10 = baseSheet.Range("A2")
Set t11 = baseSheet.Range("B2")
Set t12 = baseSheet.Range("C2")
Set t13 = baseSheet.Range("D2")
Set t14 = baseSheet.Range("E2")
Set t15 = baseSheet.Range("F2")
Set t18 = Stock.Range("B2")
Set t19 = Stock.Range("C2")
Set t20 = Stock.Range("D2")
Set t21 = Stock.Range("E2")
Set t22 = Stock.Range("F2")
Set t23 = Stock.Range("G2")
Movement = Range("G6").Value
If Movement Like "ADD NEW" Then
For i = 2 To 10000
With Worksheets("DataEntry")
If (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
Then
MsgBox "The product already exists! Select change and continue.", vbOKCancel
ElseIf Not (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
Then
meter = Application.WorksheetFunction.CountA(baseSheet.Range("A:A"))
meter2 = Application.WorksheetFunction.CountA(Stock.Range("A:A"))
arrayData = VBA.Array(t1, t2, t3, t4, t5, t6)
'arrayData2 = VBA.Array(t1, t2, t3, t4, t5, t6)
Set cleanData = Union(t1, t2, t3, t4, t5)
With cleanData.Cells
Set keli = .Find(What:="*", LookIn:=xlValues)
If keli Is Nothing Then
GoTo telos
End If
End With
baseSheet.Cells(meter + 1, 1).Resize(, 6) = arrayData
Stock.Cells(meter2 + 1, 1).Resize(, 6) = arrayData
cleanData.ClearContents
End If
End With
Next i
End If
If Movement Like "CHANGE" Then
For i = 2 To 10000
With Worksheets("DataEntry")
If (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
Then
MsgBox "Do you want to continue?", vbOKCancel
Worksheets("Catalogue").Cells(i, "A") = Worksheets("DataEntry").Cells(6, "A")
Worksheets("Catalogue").Cells(i, "B") = Worksheets("DataEntry").Cells(6, "B")
Worksheets("Catalogue").Cells(i, "C") = Worksheets("DataEntry").Cells(6, "C")
Worksheets("Catalogue").Cells(i, "D") = Worksheets("DataEntry").Cells(6, "D")
Worksheets("Catalogue").Cells(i, "E") = Worksheets("DataEntry").Cells(6, "E")
Worksheets("Catalogue").Cells(i, "F") = Worksheets("DataEntry").Cells(6, "F")
ElseIf Not (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
Then
MsgBox "The product does not exist. Select add new.", vbOKCancel
Set cleanData = Union(t1, t2, t3, t4, t5)
With cleanData.Cells
Set keli = .Find(What:="*", LookIn:=xlValues)
If keli Is Nothing Then
GoTo telos
End If
End With
cleanData.ClearContents
End If
End With
Next i
End If
telos:
End Sub
我输入一个新项目并单击更改,它应该会弹出一条消息“该产品不存在。选择添加新的。” 它显示此消息,然后弹出另一条消息并在那里崩溃。
当我尝试添加已经存在的产品时,发生了类似的事情。首先显示正确的消息,然后显示另一个并崩溃。
解决方案
问题不在于希腊字符.. 问题在于 ElseIF Not。所以我用这个改变代码
ElseIf (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) <> UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) <> UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
Then
推荐阅读
- php - PHP将数组转换为非常特殊的字符串的最佳方法
- android - 创建一个表面并将其绑定到一个不可见的画布
- reactjs - 移动设备方向:alpha 旋转j 随 beta 倾斜而变化
- api - WSO2 API Manager 中用户角色和资源 ID 之间的映射
- django - 在一个模板的多个位置调用同一段代码时出现奇怪的问题
- swift - 将值从 TableViewCell 传递到另一个 VC:Swift
- javascript - 按子项数降序对项目进行排序 Firebase 实时数据库
- jquery - Jquery eq(i) 不起作用 - 我怎么能在“for”中做?
- javascript - 如何防止表单在 Dynamics 365 中保存
- .net - 创建一个不附加嵌套组中任何字符的通用组