Board logo

標題: 請教UserForm帶入引數與帶出引數的問題 [打印本頁]

作者: clio    時間: 2016-3-23 16:59     標題: 請教UserForm帶入引數與帶出引數的問題

請教各位大大:
小的我嚐試作了一個UserForm, 裡面有一個ListBox, 一個CommandButton
想說能否在UserForm.Show時能同時載入一個Name_AR() as variant,讓這個內容值倒入ListBox,選取完畢後,按下CommandButton後能帶出一個Output_AR() as variant,讓我知道有那些被選取到,
載入我找到可使用
Public Property Let Value(Data_AR() as variant)
來處理,但是載出時,雖然也可以用
Public Property Get Value() as Variant
但是找不到好的時間點來做這個,不知道各位前輩能不能給我一些建議呢?感謝您。
作者: stillfish00    時間: 2016-3-23 19:05

回復 1# clio
通常呼叫表單就是在一般模組呼叫
Load Userform1

Userform1.Show

如果要傳一些初始化的資料給表單,可在表單程式碼新增如Sub InitForm(arInput)
  1. Public Sub InitForm(arInput)
  2.     ListBox1.List = arInput
  3. End Sub
複製代碼
一般模組Show之前呼叫InitForm傳遞給表單
  1. Sub Test()
  2.     Dim ar
  3.     ar = Array("A", "B", "C")
  4.    
  5.     Load UserForm2
  6.     UserForm2.InitForm ar
  7.     UserForm2.Show
  8. End Sub
複製代碼
Userform 按鈕後取得已選項目
  1. Private Sub CommandButton1_Click()
  2.     Dim Output_AR(1 To ListBox1.Count)
  3.     Dim i As Integer, cnt As Integer
  4.    
  5.     For i = 1 To ListBox1.ListCount
  6.         If ListBox1.Selected(i) Then
  7.             cnt = cnt + 1
  8.             Output_AR(cnt) = ListBox1.List(i)
  9.         End If
  10.     Next
  11.     If cnt > 0 Then
  12.         ReDim Preserve Output_AR(1 To cnt)
  13.         '至此 Output_AR 已取得選擇的項目
  14.     End If
  15. End Sub
複製代碼

作者: clio    時間: 2016-3-24 10:50

回復 2# stillfish00

是的,這樣寫確實沒有錯,但是我要怎麼把Output_AR由UserForm送出來到Function內來呢?
這點讓我想不出來
作者: clio    時間: 2016-3-24 18:50

jackyq前輩:
感謝您的回覆,由於我權限不足,如法私訊您,沒有經過妳的同意,我也不敢把妳的方法PO出來
照您說的方法,那Output_AR就要設成全區域變數,才能做到,是嗎?
作者: jackyq    時間: 2016-3-24 19:36

不, 那是很普通的方法
其他大大都會
我常搞烏龍才私下跟你說
老實說
大大沒有把問題表達清楚
不然其他大大早就告知你寫法

我也只是猜的, 你想幹麻

你是不是想從 Sheet1 or Sheet2 ...  外部去控制那個 UserForm1
當某某使用者按下  UserForm1 上的  CommandButton 後
你希望能從  Sheet1 抓到那個使用者的 Listbox 上的選取項目 ?
如果是 Output_AR  不用設成全區域變數
作者: stillfish00    時間: 2016-3-24 19:40

回復 3# clio
你的意思是想再把Output_AR傳回Test內?

通常我是不會再傳回Test啦,既然我已經有Output_AR,如果我要做甚麼分析或處理,就在Click內呼叫我要處理的Function 並把Output_AR傳到我要處理的Function內不就好了?

堅持要傳回Test的話,就在一般模組宣告一個模組層次的公用(Public)變數,前面的Output_AR都改成直接用這個公用變數,這樣Test內也能看到這個變數就不用傳了。
不過,你要先注意的是預設的表單,當你呼叫UserForm2.Show後,表單顯示出來,程式會停留在該行,會一直等到表單關閉才會跳到下一行。

問的不夠明確我也只能這樣回答啦。
作者: clio    時間: 2016-3-25 16:27

回復 6# stillfish00

感謝前輩的回覆,因為我是要給一串人名,讓使用者勾選掉不要的人,所以我才會需要再把結果傳回,好讓程式接下去處理這些人的後續動作,這樣看起來用公用變數是比較好的選擇,感謝您的回覆,謝謝
作者: clio    時間: 2016-3-25 16:31

回復 5# jackyq

感謝大大,我大致上是要做這件事,我的Outlook有很多個Mail 群組,每一個群組裡面的人數不同,當我新增一個人時,我會將他作分類,依據他的分類到到各別的群組內,但是要是有同一家公司的人,我則希望跳出一個清單,讓我勾選掉,不要的人,所以我才需要有傳回值,好讓我知道那些人該從群組內刪掉,不知道我這樣說明是否清楚,感謝您




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)