2010-10-20 71 views
1

我有一句话下面的代码2007的宏在那里我填写客户名称的下拉从Excel电子表格填充一个下拉列表,然后在下拉改变填充相关领域(VBA)文本框

Private Sub UserForm_Initialize() 
Dim i As Integer 
Dim cn As ADODB.Connection 
Dim rsT As New ADODB.Recordset 
Set cn = New ADODB.Connection 
With cn 
.Provider = "Microsoft.Jet.OLEDB.4.0" 
.ConnectionString = "Data Source=CCustomers.xls;Extended Properties=Excel 8.0;" 
.CursorLocation = adUseClient 
.Open 
End With 
rsT.Open "Select distinct * from Customer", cn, adOpenStatic 

i = 0 

With rsT 
' This code populates the combo box with the values 
' in the YourNamedRange named range in the .xls file. this exampletable is 2 rows by 6 columns and is set as a named range. 

Do Until .EOF 
ComboBox_Company.AddItem (i) 
ComboBox_Company.Column(0, i) = rsT.Fields(0).Value 
.MoveNext 
i = i + 1 
Loop 
End With 
End Sub 

因此,我有一个客户名称列,我创建了一个命名范围(客户),它填充下拉列表。但是,当我在下拉列表中选择一个客户时,我想填充两个地址字段(1街道,2个城市)客户的地址。

Private Sub cbo_customer_Change() 
      Dim customerName As String 
      customerName = cbo_customer.Value 
End Sub 

该电子表格有大约10列,第一位是客户,第九位是地址1,最后一位是地址2。我如何使用变量客户填充地址字段?我是否必须创建一个新的命名范围,并且有类似 从myRange中选择customer,address1,address2 where customer = customerName?

+0

为您添加了一些更新。 – ocodo 2010-10-20 04:58:05

回答

0

你自己回答了这个问题,创建一个列您的需要命名的范围,然后做选择:

"SELECT customer, address1, address2 FROM NewRange WHERE customer = '" & customerName & "'" 

到一个新的记录集,并从项目0地址字段它。

+0

哇,我甚至没有尝试过,没想到会起作用。但是,如果我有查询rsT.Open“选择客户,邮政编码,州,国家从客户”,cn,adOpenStatic我如何填充例如文本框CompanyName.Value =客户名?尝试这次做CompanyName.Value =客户,但它没有工作 – Morgan 2010-10-20 04:10:10

+0

'cbo_customer.Value'是否不为客户返回正确的值? – ocodo 2010-10-20 04:13:27

+0

我忘了那里的WHERE语句(太兴奋了)rsT.Open“SELECT Customer,Postcode,State,Country FROM Customers WHERE Customer =”+ customerName,cn,adOpenStatic虽然引发了一个错误,但我并不习惯于VBA语法,我应该如何纠正查询语句? – Morgan 2010-10-20 04:17:59