2017-06-21 29 views
-2

ユーザーフォームを作成しましたので、問題を記述するために使用します。ユーザーフォームの算術演算

私は4つのユーザー入力(製品の原価、販売台数、返品された単位数、単位当たりの修理代金)を取って、総収入(製品原価x販売台数)と総返品費用(返品台数×返品台数)である。

コードを書くにはどうすればいいですか?ここ

ユーザーフォームのイメージ:http://imgur.com/a/qc3Kk

+2

'txtTotalEarnings.Value = txtCostofProduct.Value * txtUnitsSold.Value'などです。私はちょうどテキストボックスの名前を推測していることに注意してください。何を試しましたか? – tigeravatar

+0

@tigeravatarあなたはそれらの上で算術演算を実行する前に、これらの文字列を数値に変換したいでしょう。それ以外の場合は、VBAに決定させるようにします。[あなたが望むことはできません](https://stackoverflow.com/q/44680791/1188513)。 –

答えて

0

だから、ここでは、このソリューションが私の感想です。作成するのは非常に複雑なプログラムではありません。全体的には、1つのUserFormであり、画像の中には、計算を行う1つのコードセクションと、テキストボックスに入力された値が数値であることを保証する1つのコードセクションがあります。インターフェイスは、ラベルとテキストボックスの組み合わせです:

enter image description here

それがない場合は入力された値がnumericaと警告しているかどうかを評価各テキストボックスのコードがあります。各ルーチンは、目的に合わせてIsNumeric関数を使用し、テキストボックスに値があるかどうかを確認します。 AfterUpdateイベントは、何かを入力した後にのみルーチンが実行されることを保証します。それぞれのテキストボックスのルーチンを別々に持つか、各テキストボックスが参照するモジュールに統合されたルーチンを書くかを選択できます。例のために:

Private Sub txtCost_AfterUpdate() 

     With UserForm1 
      With .txtCost 

       If Not IsNumeric(.Value) Or .Value = "" Then 
        MsgBox "Please enter a numeric value only!" 
       End If 

      End With 
     End With 

End Subの

Private Sub txtReturned_AfterUpdate() 

     With UserForm1 
      With .txtReturned 
       If Not IsNumeric(.Value) Or .Value = "" Then 
        MsgBox "Please ensure you enter only numeric values" 

       End If 

      End With 
     End With 
    End Sub 

    Private Sub txtTotalFix_AfterUpdate() 
     With UserForm1 
      With .txtTotalFix 

       If Not IsNumeric(.Value) Or .Value = "" Then 
        MsgBox "Please ensure you enter only numeric values" 
       End If 

      End With 
     End With 
    End Sub 

    Private Sub txtUnits_AfterUpdate() 

     With UserForm1 
      With .txtUnits 

       If Not IsNumeric(.Value) Or .Value = "" Then 
        MsgBox "Please ensure you enter only numeric values" 
       End If 

      End With 

     End With 
    End Sub 

ルーチンの肉とジャガイモも複雑ではありません。私は、計算の値を吐き出すために各テキストボックスの値を直接使用しました。代わりに、変数を使用することもできます(かなり大きい数値を扱うことができるため、xをDoubleとしてデカールしましたが、この例では使用しません)。ルーチンはModule1内にあり、すべての値が同じIsNumeric関数を持つ数値であることを確認し、数式を実行し、空であるか番号でないかを警告します。私はあなたが貯蓄を計算したか、またはYESまたはNOの基準を計算したかについて肯定的ではなかったので、それを調整する必要があります。

Sub QA_prog() 

Dim x As Double 

With UserForm1 

    If IsNumeric(.txtCost.Value) And IsNumeric(.txtUnits.Value) _ 
     And IsNumeric(.txtReturned.Value) And IsNumeric(.txtTotalFix.Value) Then 

      .lblEarn.Caption = .txtCost.Value * .txtUnits.Value 
      .lblTRC.Caption = .txtCost * .txtTotalFix 
      .lblProfit = .lblEarn.Caption - .lblTRC.Caption 
      .lblCostFix = .txtReturned * .txtTotalFix 
      .lblTE.Caption = .lblProfit - .lblCostFix 
      .lblSave.Caption = .lblTRC + .lblCostFix 

      If .lblSave.Caption > 5000 Then 
       .txtYorN.Text = "NO" 
      Else 
       .txtYorN.Text = "YES" 
      End If 

    Else 

     MsgBox "Double check your values!" 

    End If 

End With 

End Sub 

最後に、ボタン。 [終了]ボタンは、アンロードを使用してプログラムを閉じます。

Private Sub cmdExit_Click() 
Unload UserForm1 
End Sub 

計算ボタンがサブルーチンQAを呼び出します。

Private Sub cmdCalc_Click() 
Module1.QA_prog 
End Sub 

プログラムを起動するために、あなただけのスプレッドシートと型にボタンを追加する必要がある「UserForm1.showを」コードウィンドウでプログラムをアクティブにします。