2016-03-18 19 views
2
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.valuerandCount = TextBox1.Text,但似乎沒有工作。我錯過了什麼?我如何得到它的工作。在此先感謝VBA /宏代碼獲取文本框的值

+0

'TextBox1'位於何處?它在一張紙上嗎?哪張?它是否在表單中(表單的名稱)?你使用表單控件還是ActiveX控件? – Ralph

回答

2

如果TextBox1的是一個名爲主表,那麼你可以使用這個:尚未

Worksheets("Main").TextBox1.Value 

更好,你可以給紙張的像shtMain然後CodeName使用

shtMain.TextBox1.Value 

最後,你還可以獲取到文本框ŧ通過形狀集合(但上面的方法是可取的)...

Worksheets("Main").Shapes("TextBox1").OLEFormat.Object.Object.Value 
+0

嗯,也許把它作爲一個新的問題,並提供有關你想要做的更多細節 – ThunderFrame

+0

哦。不知道會起作用。我曾嘗試過,並發現問題在於我無法首先打開文件,在那裏我應該獲取數據。謝謝!最簡單的答案,但做的事情。我已經爲我的其他問題發佈了另一個問題。我希望你能再次幫助我 – markerbean

0

您應該能夠使用foo = InputBox("bar")

然而,如果你是從一個用戶窗體得到它那麼這將是foo = UserForm1.TextBox1.Value