2015-11-29 15 views
0

的起始這是我到目前爲止已經試過,定義爲行來源組合框是在列值在A2

Private Sub UserForm_Initialize() 
Dim WBK As Workbook 

Set WBK = ActiveWorkbook 
    WBK.Sheets("MFG_DATA").Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer" 
Me.MFGBOX.RowSource = "Manufacturer" 
End Sub 

我發現了一個錯誤1004,所以我沒有正確定義我的對象?

+0

參見[這裏](HTTPS:/ /msdn.microsoft.com/en-us/library/office/ff835300.aspx)如何添加命名範圍。然後你用'Range(「Manufacturer」)調用它'如果你想使用一個臨時變量,那麼你需要使用'Set Manufacturer = WBK.Sheets(「MFG_DATA」)。範圍(「A2」,Range(「A」 &Rows.Count).End(xlUp))',那麼不要在最後一行使用引號。 –

回答

0

我通常會做的是使用.AddItem方法來填充組合框。

Private Sub UserForm_Initialize() 

Dim WBK As Workbook 
Dim n as Integer 
Dim item() as String 

Set WBK = ActiveWorkbook 
n = WBK.Sheets("MFG_DATA").Range("A" & WBK.Sheets("MFG_DATA").Range("A" & Rows.Count).End(xlUp)).Row 

For i = 1 To n 
    With Me.MFGBOX 
    .AddItem item(i) 
    End With 
Next i 

End Sub 

或者,如果你想使用命名的範圍

Private Sub UserForm_Initialize() 

Dim cRng as Range 
Dim cLoc As Range 
Dim ws As Worksheet 
Dim n as Integer 

Set ws = Worksheets("MFG_DATA") 

n = ws.Range("A" & ws.Range("A" & Rows.Count).End(xlUp)).Row 

Set cRng = ws.Range("A2:A" & n) 
ActiveWorkbook.Names.Add Name:="Manufacturer", RefersTo:=cRng 

For Each cLoc In ws.Range("Manufacturer") 'or For Each cLoc In cRng 
    With Me.MFGBOX 
    .AddItem cLoc.Value 
    End With 
Next cLoc 

End Sub 
+0

謝謝@B。 Peulic,由於某種原因,這會在UserForm2.Show中觸發錯誤1004。這是打開包含組合框的用戶窗體的子工具。 – Geoff

+0

@Geoff我試圖模仿你的錯誤,而當cRng無效時就發生了。你能否請你檢查一下你的範圍是從A2開始的,還是在A列中有任何值。事情是,代碼正在計算A列中的記錄總數並創建一個範圍。如果沒有,範圍將是A2:A1,這是無效範圍。您可以擴大範圍,使其從A1開始,直到A&n,但它取決於您擁有的數據以及它在哪一列(您想在組合框中使用的那一列)。 –

1
WBK.Sheets("MFG_DATA").Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer" 

這裏Range("A" & Rows.Count).End(xlUp)是沒有資格與工作表對象,因此將把活動工作表。如果那不是「MFG_DATA」,那麼你會得到一個錯誤。

更好

使用:

With WBK.Sheets("MFG_DATA") 
    .Range("A2", .Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer" 
End with 
0

相反,宏,您可以使用命名範圍,只需要創建一個表中列A說「表1」添加自A2..An組合框中的值,然後它會進入表範圍。

然後定義命名的範圍爲Combovalue和指定範圍爲=表1 [Headername],這將自動獲得,即使您在表中添加新的組合框的值更新。

現在在組合框屬性給在行來源 proerty命名的區域名稱Combovalue,現在運行的形式命名的範圍值將顯示在下拉列表:)

+0

這會影響我有一個循環找到列A中的值嗎? – Geoff

+0

而不是你使用這種方法的循環,請嘗試一下,你會知道 – Linga