我使用简单的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文本框都在列表中填充了其他宏的帮助。

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

第一宏删除那些小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楼 票数:1 已采纳

我猜你的问题是数字和字符串混合。 或者,您将ORAND混淆了?

我假设不是Me.AusAmmTubesAuslagernMe.AusAvailTubes是用户窗体上的控件,并且您要检查输入。 如果你仔细检查你if语句来,你会发现总是导致True -如果你输入的字符串开始的东西,如“X”为除AusAmmTubesAuslagern

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

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

  ask by Klaudiusz Rolnik translate from so

未解决问题?本站智能推荐:

3回复

使用UserForm的ExcelVBAIf/Then语句

所以我之前做过一些Javascript编辑,但从那以后它已经有一段时间了。 我知道我应该知道如何做到这一点,但解决方案已经逃过了我。 我要做的就是创建一个ElseIf命令,以便根据UserForm中的值将某些公式放入需要它们的单元格中。 这就是我所拥有的:
1回复

在Userform上使用带有复选框的IF和AND语句

一点背景:到目前为止,我创建了一个带有复选框的用户表单,每个复选框都运行单独的宏,然后在未选中时运行相同的宏以返回“正常”状态。 这是使用IF,Else声明完成的。 我的问题是如何将If语句与AND语句结合使用,这样当/如果选中两个框,它们就会运行不同的代码或宏。 我仍然是VBA和编码
1回复

您可以使用if语句来决定将哪些UserForm放入信息中吗?

我有以下问题:我在Excel中有UserForm A和UserFormB。 两种UserForm都调用UserFormC。用户从UserForm C中选择一个ID号,然后我希望将其放入UserForm A或UserForm B中的标签中,具体取决于当前打开的是哪个。 我已经寻找了可能的答案
2回复

可以直接在UserForm.AddItem中使用逻辑语句吗?

我知道并理解使用逻辑测试将项添加到ListBox的常用方法: 但是,我想知道.AddItem是否可以直接使用逻辑语句? 就像是: 这不是一个让我难过的问题。 我只是想知道是否有一种替代方法可以添加到我的知识库中。
1回复

宏未执行的部分代码

非常感谢你的帮助! 不幸的是,我测试了您的代码,并收到以下错误消息:运行时错误9下标超出范围 实际上,这行似乎引起了问题:Set wbThis = ThisWorkbook由于此问题,似乎在当前工作簿中无法识别“ Sheet1”(我通过即时窗口中的调试打印对其进行了检查),我对此进行了咨询
1回复

在UserForm中使用点模式

我注意到使用RefEdit控件会导致Excel进入“点”模式以选择适当的范围。 (您看到“就绪”状态更改为“点”,当前参考在当前视图中变为动画)。 我的问题是,有没有办法轻松复制这种模式? 我遇到了问题,因为我的表单不是模态的,当使用RefEdit控件回到它之后,Excel就会锁定(一个
1回复

使用UserForm删除行

我建立了一个带有组合Combobox的简单UserForm ,用于按名称删除行。 我已经使用宏填充了Combobox框行源,以建立一个名为“ Combo_List”的命名范围。 我将其静态插入到rowsource属性中(意味着,我没有使用代码来做到这一点)。 同样在UserForm
1回复

在模块中使用UserForm中的变量

我有一个带有复选框的用户表单 在这里,变量MyVariable运行良好。 但是然后,在模块中: 变量MyVariable始终为空。