基于多个文本框值执行任务

时间:2017-03-10 01:37:06

标签: excel vba excel-vba

我正在学习VBA。两件事:

  1. 有什么比那么长的其他更高效的东西 命令(我试图找到最低的文本框值)
  2. 基于最低文本框值,形状出现在Excel工作表中。这个 只有在我更改NBInv文本框时才有效。 但是,这不是我希望我的程序要做的。我想要它 不断监控每个文本框的值并找到最低值 之一。
  3. 示例代码:

     public function show($zip, $street)
        {    
            $flyer =  Flyer::loacatedAt($zip, $street)->first();    
            return view('flyers.show', compact('flyer'));
        }   
    

3 个答案:

答案 0 :(得分:0)

Function Min(ParamArray values() As Variant)
       Dim minValue, Value As Variant
       minVal = values(0)
       For Each Value In values
          If  minVal > Value Then minVal = Value
       Next
       Min = minVal
End Function

您可以使用此代码查找最小值。

Private Sub NBInv_Change()

     If NBInv.Text = "0" Or NBInv.Text = "" Then
        ActiveSheet.Shapes("NFlow").Visible = False

     ElseIf Val(NBInv.Value) = Min(Val(txt1.value),Val(txt2.value),Val(txt3.value),Val(txt4.value)) Then
        ActiveSheet.Shapes("NFlow").Visible = True
        ActiveSheet.Shapes("FlowNFalse").Visible = False
     End If
End Sub

答案 1 :(得分:0)

您可以简化代码中的Visible属性设置。 Val(NBInv.Value)将为所有非数字值和数字0返回0.CBool​​()将0转换为False,将所有其他值转换为True。

Private Sub Solution()
    Dim HasValue As Boolean

    HasValue = CBool(Val(NBInv.Value))
    ActiveSheet.Shapes("NFlow").Visible = HasValue
    ActiveSheet.Shapes("FlowNFalse").Visible = Not HasValue
End Sub

以下函数将返回列出的所有控件中值最小的函数。

  

私人功能最小()

Dim Fun As Variant
Dim Tmp As Variant
Dim Inv() As String
Dim i As Integer

Inv = Split("NBInv NEBInv EBInv SEBInv SBInv SWBInv WBInv NWBInv")
Fun = 10 ^ 6
For i = 0 To UBound(Inv)
    Tmp = Val(ActiveSheet.OLEObjects(Inv(i)).Object.Value)
    If Tmp < Fun Then Fun = Tmp
Next i
Smallest = Fun 
     

结束功能

变量Fun必须设置为一个大于您在文本框中遇到的值的值。我选择了10 ^ 6。

答案 2 :(得分:0)

我将以下代码放在相关的工作表代码窗格中:

NewPage