web-dev-qa-db-ja.com

テキストボックスの値を取得するVBA /マクロコード

Sub CopyRandomRows()

 Windows("sample rnd.xlsm").Activate
    Rows("1:1").Select
    Selection.Copy
    Application.CutCopyMode = False
    Selection.Copy
    Windows("rnd sample draft.xlsm").Activate
    Sheets("Random Sample").Select
    Rows("1:1").Select
    ActiveSheet.Paste


  Dim source As Range, target As Range, randCount&, data(), value, r&, rr&, c&


  Set source = Workbooks("sample rnd.xlsm").Worksheets("Sheet1").Range("A2:L5215")

  Set target = Workbooks("rnd sample draft.xlsm").Worksheets("Random Sample").Range("A2")

  randCount = 5

  data = source.value


  For r = 1 To randCount
    rr = 1 + Math.Round(VBA.rnd * (UBound(data) - 1))
    For c = 1 To UBound(data, 2)
      value = data(r, c)
      data(r, c) = data(rr, c)
      data(rr, c) = value
    Next
  Next


  target.Resize(randCount, UBound(data, 2)) = data

End Sub

これは私のコードです。私の問題は、コードを変更した場合にのみ、必要なデータの数を変更できることですrandCount = 5。私は自分のTextBoxを使用して、取得するデータの数を定義するために使用できるようにしたいと考えています。私は試した randCound = TextBox1.valueおよびrandCount = TextBox1.Textが機能しないようです。何が欠けていますか?機能させるにはどうすればよいですか。前もって感謝します

4
markerbean

TextBox1がMainという名前のシートにある場合、これを使用できます。

Worksheets("Main").TextBox1.Value

さらに良いのは、シートにCodeNameのようなshtMainを与えてから、

shtMain.TextBox1.Value

そして最後に、形状コレクションを介してテキストボックスにアクセスすることもできます(ただし、上記の方法が推奨されます)...

Worksheets("Main").Shapes("TextBox1").OLEFormat.Object.Object.Value
2
ThunderFrame

foo = InputBox("bar")を使用できるはずです。

ただし、ユーザーフォームから取得している場合は、foo = UserForm1.TextBox1.Value

0
TunaLobster