返回列表 上一主題 發帖

[發問] VBA下拉式選單(已解決)

[發問] VBA下拉式選單(已解決)

本帖最後由 arcticfox 於 2011-5-19 17:27 編輯

各位大大午安@@"
這次又有一個小問題

如下圖, 我設計了一個客戶管理表, 不過我希望之後所有對話框的下拉式選單"Company"可以引用該表格的客戶欄位


意思就是說, 未來新增的客戶資料, 其中客戶的名字可以被引用到下拉式選單裡面, 如下圖

因為我只會用寫

Private Sub UserForm_Initialize()

Pro_Statu.Combo_Cus.List = Array("xxxx", "xxxx") 之類的

End Sub

不曉得是否有什麼方法可解決此問題? 再麻煩各位大大指導, 謝謝^^

好, 謝謝大大
我先試試看^^

TOP

回復 4# Hsieh

3Q兩位大大的指導, 不過都沒用出來T_T
版主意思是說像下面一樣, 寫法嗎


不過他不讓我設定屬性, 無效的屬性直
我直接在RowSource打 Cus_List


想請問是哪個環節搞錯呢??

TOP

哇咧~~怎麼和我想的完全不一樣=.=
我先試試看
果然用想的都比實際下去弄還簡單
電腦太笨  還是我太笨XD

3Q各位大大

TOP

本帖最後由 arcticfox 於 2011-5-17 14:34 編輯

回復 6# chin15


   一個小問題
我將大大的程式碼改寫如下:


Private Sub UserForm_Initialize()

Dim i%

i = Range("A65536").End(xlUp).Row
Pro_Statu.Combo_Cus.List = Worksheets("客戶資料管理").Range("A1:A" & i).Value

End Sub
不過總是會出現, 執行階段錯誤381 - 無法設定List屬性. 屬性陣列引索不正確

所以我重新把整段程式複製進去
並只改寫了combobox1那個部分

卻得到 : 執行階段錯誤424 - 此處需要物件

TOP

本帖最後由 arcticfox 於 2011-5-17 15:11 編輯

回復 9# Hsieh


酷!!  3Q 版大 :'(

不想再多增加版面
在一次3Q各位大大
我終於搞定哩XD
等摸熟再來慢慢試試看自己用寫的方式
:lol

TOP

回復 9# Hsieh

我想繼續延續上次版主說的解決辦法
不過要先謝謝版主, 我終於知道"名稱管理"的功用(2010)

另一個小疑問在於, 我是否可以直接在VBA的模組裡直接引用這些設定呢?
如果要引用這些設定, 應該要用什麼方式去做引用


我有試過製作了一個名為Sales
Sales=INDEX(客戶資料管理!$A$2:$D$1000, MATCH(專案紀錄!$C$2:$C$1000, 客戶資料管理!$A$2:$A$1000,0),4)

然後利用錄製巨集的方式記錄錄製,
之所以不願意, 直接在儲存格直接引用, 如下圖:

是因為整個檔案會變很大, 也不美觀

錄好的噹案長這樣
Sub 巨集1()
'
' 巨集1 巨集
'
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=Sales"
    Range("D3").Select
End Sub

然後我把它改到我的模組裡
Sub 專案紀錄() 'Pro_Statu

Dim NewPro As Range
Dim PN As Range
Dim Cus As Range
Dim Sales_P As Range
Dim EnCus As Range

Sales_P.FormulaR1C1 = "=Sales"

   With Worksheets("專案紀錄")
    Set PN = .Columns(2).Cells.Find(Pro_Statu.Text_PN.Value, LookIn:=xlValues, Lookat:=xlWhole)
    Set Cus = .Columns(3).Cells.Find(Pro_Statu.Combo_Cus.Value, LookIn:=xlValues, Lookat:=xlWhole)
    Set EnCus = .Columns(12).Cells.Find(Pro_Statu.Text_EnCus.Value, LookIn:=xlValues, Lookat:=xlWhole)
   
   
    If Not PN Is Nothing And Not Cus Is Nothing And Not EnCus Is Nothing Then
   
     MsgBox "該客戶已開立此案!  如欲修改,請選擇紀錄維護,謝謝.", vbOKOnly + vbExclamation
            Pro_Statu.Combo_Cus.SetFocus
            Exit Sub
     Else
     
      Set NewPro = .Range("a65536").End(xlUp).Offset(0, 0)
        NewPro.Offset(1, 0) = "Going"
        NewPro.Offset(1, 1) = Pro_Statu.Text_PN
        NewPro.Offset(1, 2) = Pro_Statu.Combo_Cus
       NewPro.Offset(1, 3) = Sales_P
'        NewPro.Offset(1, 4) = Qprice
'        NewPro.Offset(1, 5) = Sprice
        NewPro.Offset(1, 6) = Date
        NewPro.Offset(1, 7) = Date
        NewPro.Offset(1, 8) = Pro_Statu.Text_Model
        NewPro.Offset(1, 9) = Pro_Statu.Combo_App
        NewPro.Offset(1, 10) = Pro_Statu.Text_Qty
        NewPro.Offset(1, 11) = Pro_Statu.Text_EnCus
        NewPro.Offset(1, 12) = Pro_Statu.Combo_Cntry
        NewPro.Offset(1, 13) = Pro_Statu.Text_Cap
        NewPro.Offset(1, 14) = Pro_Statu.Text_Rev
        NewPro.Offset(1, 15) = Pro_Statu.Text_Com
     
    End If

    End With

不過會一直跑出錯誤訊息:


再麻煩大大, 3Q

TOP

回復 12# Hsieh

了解
不過如果是其他用法呢
如:
Sales=INDEX(客戶資料管理!$A$2:$D$1000, MATCH(專案紀錄!$C$2:$C$1000, 客戶資料管理!$A$2:$A$1000,0),4)
我設定了當我選擇了客戶這個選項, 旁邊的業務欄位會自動找尋前一一個表格的內容, 並將其相對應的資料填入此表格中, 詳細如上一個回覆

只是我不管如何引用
如將Sales.Value
都是不行的

不過剛剛大大有提到rowsource的屬性 只能在該屬性內變動
所以我才有此一問
如果我在動態表格內設定了其他的公式
依照大大的講法應該是可以被引用在VBA裡
但是每次的錯誤就是: 未定義變數名稱之類的
讓我有點困擾^^"

真是不好意思, 不過你剛剛說的方法
是沒問題的^^ 我也記下來啦!!
再麻煩了, 謝謝

TOP

回復 14# Hsieh


哈哈  抱歉 抱歉我一直沒說清楚
這不是下拉式選單, 只是因為看到版大用了這招
突然發現, 那個功能也可以定義別的東西
所以就突發奇想, 那如果我把原先要定義的公式也用一個名稱先定義
所以才會有剛剛那個公式
而該公式主要的目的是
為節省輸入所花費的時間
在前一張表格內我有建立了客戶的基本資料與所負責的業務
所以我會希望之後如果有選擇了客戶,  在輸入新開專案的資料同時, 就會自動把負責的業務一同帶入

如果只是單純定義, 然後直接套成公式使用測試後是OK的
不過問題是要寫進VBA裡面, 就不行哩,  我還特別用了FormulaR1C1
還是不行(不過用錄製巨集的方式看該檔案, 裡面確實也是用formulaR1C1)
所以不懂為啥改寫後, 就不行

真是不好意思, 我再繼續研究一下

TOP

回復 16# Hsieh


你是神XD
原來如此
對!! 他就是一直nothing
3Q 坂大
這樣我明白哩

TOP

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題