如果部分语句未使用UserForm

时间:2018-10-12 15:09:03

标签: excel vba

在执行来自用户表单的数据之前,我使用简单的if语句进行一些检查。如果我的说法正确,那么代码将继续进行更改,否则,我将msgbox

这部分无效:

If Me.AusAmmTubesAuslagern.Value <= Me.AusAvailTubes Or _
      Me.AusAvailTubes <> "N/A" Then

第一部分If Me.AusAmmTubesAuslagern.Value <= Me.AusAvailTubes运作良好。 msgbox出现了。

如果我在声明中重现这一点:我的Me.AusAvailTubes = N / A,则它不起作用。做出这些更改。仅当该字段具有除N / A以外的其他txt时,才应该发生这种情况。

我试图直接从列表中而不是从UserForm中获取数据,这是同样的问题...

在其他宏的帮助下,所有这些UserForm文本框都从列表中填充。

每种材料都有2种存储方式。小件。或大箱子。从其中的几个人中,您可以拿起那些小电脑。从其他只整个盒子。那就是为什么我写了两个与UserForm一起使用的宏。

1st Macro删除那些小的pc。 仅第二个整箱。

我需要2个检查点:

检查点1:如果Me.AusAmmTubesAuslagern.Value <= Me.AusAvailTubes,则检查ex。仓库中的一个盒子里有40个试管,用户尝试删除更多的棕褐色40,它将用msgbox阻止他。

检查点2:该材料不是放在小块中。可用,您需要随身携带整个包装盒。在这种情况下,我的列表中有一列为“ N / A”,它将与该文本框Me.AusAvailTubes中的其他宏一起写入,然后用户才能尝试从带有宏的仓库中将其撤回。该文本框需要检查,如果该文本框中的内容为“ N / A”,则该代码也将提供msgbox并停止该代码

整个代码:

Sub Tubes()
  Dim totRows As Long, i As Long
  Dim wsTubes As Worksheet
  Dim oldVal As Integer
  Dim newVal As Integer
  Dim AusWS As Worksheet
  Dim newValAus As String
  Dim oldValAus As String

 Select Case Me.AusListe.Value

  Case Is = "E1G"
  Set wsTubes = E1G
  Set AusWS = AusE1G

  totRows = wsTubes.Range("A1").CurrentRegion.Rows.Count

'Check to see if value exists

 If WorksheetFunction.CountIf(wsTubes.Range("A:A"), Me.AusCharge.Value) = 0 Then
    MsgBox "no right Charge chosen"
   Me.AusCharge.Value = ""
 Exit Sub
End If

With wsTubes
 For i = 2 To totRows
    If .Cells(i, 1) Like Me.AusCharge Then
      If Me.AusAmmTubesAuslagern.Value <= Me.AusAvailTubes Or _
      "N/A" <> Me.AusAvailTubes Then
         oldVal = .Cells(i, 14).Value
         newVal = oldVal + Me.AusAmmTubesAuslagern.Value
         wsTubes.Cells(i, 14) = newVal
       Else
        MsgBox "So viele Stücke dieser sind nich auf Lager vorhanden!"
        Exit Sub
      End If
    End If
Next
End With

“其余代码对上面的那部分并不重要

End Select
End Sub

1 个答案:

答案 0 :(得分:1)

我猜你的问题是数字和字符串混合。还是让ORAND感到困惑?

我假设Me.AusAmmTubesAuslagernMe.AusAvailTubes不是用户窗体上的控件,并且您想检查输入。如果您仔细检查您的if语句,将会看到总是会在True中产生结果-除非您在AusAmmTubesAuslagern

中输入以“ X”开头的字符串

为简单起见,让我们假设:

val1: Me.AusAmmTubesAuslagern.Value
val2: Me.AusAvailTubes
cond1: v1 <= v2
cond2: v2 <> "N/A"

然后,您的IF语句会导致(同时在条件AND中加上条件,也许正是您所需要的)

val1    val2    cond1   cond2   cond1 OR cond2  cond1 AND cond2  
-----------------------------------------------------------------
3       2       False   True    True            False
2       3       True    True    True            True
1       "N/A"   True    False   True            False
"AA"    "N/A"   True    False   True            False
"XY"    "N/A"   False   False   False           False