2017-04-25 5 views
0

私はuserformを持っています。これは通貨為替レートの計算に役立ちます。 これは、2つのRefEditBox(RefEdit1 =入力範囲、RefEdit2は=出力レンジ)一つのテキストボックス(TextBox1テキストボックス - 通貨レートを入力するように)している私は基本的にシート内の範囲を選択して数値を掛けたときのランタイムエラー91のユーザーフォーム

enter image description here

トウコマンドボタン(CommandButton2をは=行くとのCommandButton1は=キャンセル) RefEdit1から、入力範囲(為替レートの値を計算したいセル)を選択する必要があります。 TextBox1、換算レートを入力することができます RefEdit2は為替レートの値を希望する出力範囲です反映する。

基本的に、入力範囲の各セルにTextBox1値を乗算し、RefEdit2で指定された範囲の出力を与える必要があります。

rng = ws.Range(Me.RefEdit1.Text) 

私は、しかし、私が

ランタイムエラー91オブジェクト変数またはWithブロック変数が、この行に

を設定していないエラー与えて、このコードを作成しました

下記のコードをご覧ください:

Private Sub CommandButton1_Click() 
    Unload UserForm1 
End Sub 

Private Sub CommandButton2_Click() 

Dim ws As Worksheet 

Dim rng As Range 

ws = ActiveWorkbook.ActiveSheet 

rng = ws.Range(Me.RefEdit1.Text) 

rng.Formula = Application.Evaluate("=" & rng.Address & "*" & Me.TextBox1.Value) 

Range(Me.RefEdit2.Text) = rng.Value 


End Sub 
+0

範囲 'rng'を最初に範囲に設定する必要があります( 'set rng = Worksheets(" sheet1 ")のように)あなたがそれを使用することができる前に。 –

+0

'rng = Range(Me.RefEdit1.Text)を設定する必要があると推測する\\ rng.Formula = Application.Evaluate(" = "&rng.Address&" * "&Me.TextBox1 .Value)\\ 範囲(Me.RefEdit2.Text)= rng.Value' – SJR

+0

こんにちは私は以下のようにコードを改訂しましたが、まだエラーがあります – Stacey

答えて

1

あなたは2つの範囲を1つとして扱っています。そのため、両方が影響を受けています。以下はそれらを分けて、トリックを行います:

Private Sub CommandButton1_Click() 

    Unload UserForm1 

End Sub 

Private Sub CommandButton2_Click() 

    'Declare 
    Dim ws As Worksheet 
    Dim inputrng As Range 
    Dim outputrng As Range 

    'Set 
    Set ws = ActiveWorkbook.ActiveSheet 
    Set inputrng = ws.Range(Me.RefEdit1.Text) 
    Set outputrng = ws.Range(Me.RefEdit2.Text) 

    'Write calculated value 
    outputrng.Formula = Application.Evaluate("=" & inputrng.Address & "*" & Me.TextBox1.Value) 

    'Undeclare 
    Set ws = Nothing 
    Set inputrng = Nothing 
    Set outputrng = Nothing 

End Sub 
+0

それは本当にありがとうございました:) – Stacey

関連する問題