2017-03-23 12 views
0

xとyの数を計算するコードがあります(実際には列と行です)。ユーザーフォームにコードを挿入して機能させるにはどうすればよいですか?次に、各xとyのデータをキー入力して「OK」を押すと、出力がワークシートに表示されます。 「OK」の部分にはどのようなコードを使用しますか?また、「キャンセル」の部分も同様です。私はまだVBAコードが新しくなっています。マクロExcel:ユーザーフォームにマクロを割り当てます。

マイコード:

Sub InsertShapeRange() 

Dim my_row As Integer 
Dim my_col As Integer 
Dim Rng As Range 
Dim shp As Shape 
Dim ws As Worksheet 

my_col = Application.InputBox("No. of x dies?", "Wafer Map", Default:=0) 
my_row = Application.InputBox("No. of y dies?", "Wafer Map", Default:=0) 

Set Rng = Selection 
Set Rng = Rng.Resize(my_row, my_col) 
Set ws = Rng.Parent 
Set shp = ws.Shapes.AddShape(1, Rng.Left, Rng.Top, Rng.Width, Rng.Height) 
With shp 
    .Fill.Visible = msoFalse 
    With .Line 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(0, 0, 0) 
     .Transparency = 0 
    End With 
End With 
With Rng 
    .Borders(xlInsideHorizontal).LineStyle = xlContinuous 
    .Borders(xlInsideVertical).LineStyle = xlContinuous 
End With 
End Sub 

以下に示すように、私はユーザーフォームを持っています。

UserForm

+0

VBEditorでuserformを見たときに、「OK」を右クリックして表示 - >コードに移動できませんか?または、「コードを表示しますか? – BruceWayne

+0

Can。私が意味するのは、私がnoのデータを入力した後です。 xとyが死んだら「OK」をクリックすると、出力がワークシートに表示されます。 「OK」の部分にどのようなコーディングをして、矩形とグリッドが必要な出力を得ることができるでしょうか。 – prestan

+1

[このページ](http://www.excel-easy.com/vba/userform.html)は役に立ちますか?または[this one](http://www.contextures.com/xlUserForm01.html)? – BruceWayne

答えて

0

あなたのサブルーチンにパラメータを追加することができます。変数は今、サブ定義で定義されている通ります。次に、これらの行を削除する必要があります

Sub InsertShapeRange(my_col As Integer, my_row As Integer) 

:ボタンを右クリックして、クリックすると

Dim my_row As Integer 
Dim my_col As Integer 

my_col = Application.InputBox("No. of x dies?", "Wafer Map", Default:=0) 
my_row = Application.InputBox("No. of y dies?", "Wafer Map", Default:=0) 

今すぐごOK]ボタンのコードを追加し、ビューコードを選択します。

Private Sub cmdOK_Click() 
    InsertShapeRange txtXDies, txtYDies 
    Me.Hide 
End Sub 

[OK]ボタンの[既定]プロパティを[True]に設定すると、[Enter]キーを押しても同じことができます。 CancelプロパティがFalseに設定されていることを確認します。キャンセルボタンの

OK Button Default property = True

、フォームを非表示にするには、次のコードを入力してください。

Private Sub cmdCancel_Click() 
    Me.Hide 
End Sub 

最後に、CancelボタンのCancelプロパティをTrueに設定します。これにより、Escapeキーをクリックするのと同じことができます。また、DefaultをFalseに設定します。

Cancel Property of Cancel Button = True

完成したフォームのコードモジュールには、次のようになります。

Option Explicit 

Private Sub cmdCancel_Click() 
    Me.Hide 
End Sub 

Private Sub cmdOK_Click() 
    InsertShapeRange txtXDies, txtYDies 
    Me.Hide 
End Sub 

完成InsertShapeRangeサブルーチンは、次のようになります。

Sub InsertShapeRange(my_col As Integer, my_row As Integer) 

    Dim Rng As Range 
    Dim shp As Shape 
    Dim ws As Worksheet 

    Set Rng = Selection 
    Set Rng = Rng.Resize(my_row, my_col) 
    Set ws = Rng.Parent 
    Set shp = ws.Shapes.AddShape(msoShapeRectangle, Rng.Left, Rng.Top, Rng.Width, Rng.Height) 
    With shp 
     .Fill.Visible = msoFalse 
     With .Line 
      .Visible = msoTrue 
      .ForeColor.RGB = RGB(0, 0, 0) 
      .Transparency = 0 
     End With 
    End With 
    With Rng 
     .Borders(xlInsideHorizontal).LineStyle = xlContinuous 
     .Borders(xlInsideVertical).LineStyle = xlContinuous 
    End With 

End Sub 

私の例ではテキストボックスは "cmdCancel" "txtXDies" と "txtYDies"、OKボタン "cmdOK" と命名し、ボタンをキャンセルしています。プロパティウィンドウで名前を確認したり、名前を変更したりできます。F4キーを押しながらオブジェクトをクリックします。

+0

完成した 'InsertShapeRange'サブルーチンはどこに置くのですか?ユーザーフォームまたはシート1 /モジュール? – prestan

+0

どちらでも動作します。最も単純なのは、ボタンクリックイベントコードの下のUserFormコードに配置することです。私自身、私はUserFormではなく、Sheet1ではなく、フォームなしで簡単に実行できるように、新しいモジュールに入れます。これを行うには、左側のプロジェクトエクスプローラで[Modules]フォルダを右クリックして新しいモジュールを作成します。挿入を選択し、モジュール(ユーザーフォームまたはクラスモジュールではない)を選択します。 – ScottDK

+0

また、スタイルと読みやすさの問題として、番号1の代わりにmsoShapeRectangleを使用します。私はその答えを編集しました。 Set shp = ws.Shapes.AddShape(msoShapeRectangle、....)すべてのプログラムを学習すると最高です。実験をして何が起こるか見るのを恐れないでください。 (あなたがファイルを削除する方法を学んでいない限り、それは...はい、難しい方法を学んだ) – ScottDK

関連する問題