2014-02-26 31 views
0

我正在創建用戶表單,我將使用它來插入數據,然後創建其他內容。Excel VBA:UserFom - 文本框的值取決於組合框的值

我有一個用戶窗體與組合框和幾個文本框。 ComboBox充滿了範圍內的數據。我想要根據ComboBox值更改文本框的值。文本框的值應該從工作表中填入特定的值。我想過創建For Each循環來確定所選ComboBox值的Row,然後使用Row number和設置適當的偏移量來更改TextBoxes。

工作表爲表頭和填充,如姓名,所在城市等

但是我的代碼不中用戶窗體工作數據。

任何想法什麼是錯的或可能是一個不同的方法來解決問題?

klient =組合框名

Private Sub klient_Change() 

Dim MyCell As Range, MyRange As Range 
Dim wiersz As Long 

Set MyRange = Range("klienci") 

For Each MyCell In MyRange 
    If klient.Value = MyCell.Value Then 
    wiersz = MyCell.Value 
    Exit For: 
    End If 
Next 

MsgBox (wiersz) 

End Sub 
+0

你如何初始化組合框?像這樣'Klient.List = Range(「klienci」)'?在這種情況下,你可以像這樣使用sth從命名範圍獲得klient的索引:'Klient.ListIndex' –

+0

@simoco我對Userforms很新穎...我的初始化是用ComboBox RowSource Property寫的。你建議把這個語句放到'Userform_initialize'中嗎? – lowak

+0

使用'RowSource'很好:)關於你的主要問題,你可以使用這一行來獲取選定項目的組合框的範圍:'MsgBox Range(「klienci」)。Cells(1 + Klient.ListIndex,1).Address '(我想你的rowSource正好是'klienci'範圍) –

回答

0

至於從意見的後續問題,此代碼的工作:

Private Sub klient_Change() 
    MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Address 
    'do something else, e.g. get element one to the right: 
    MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Offset(,1).Address 
End Sub 
+1

事實上,我所做的更改都是從「地址」到「行」,msgbox可以更改爲我現在需要的任何內容。如果我的代碼按我的意圖工作,我總是使用msgbox作爲測試;)謝謝! – lowak

相關問題