ComboBox从Sheet填充后,获取对应单元格写入其他Sheet的代码问题排查
问题排查与修复方案
核心错误:数据源工作表混淆
你的代码把ws指向了Sheet_Invoice_Template,但ComboBox的数据源是Sheet_Contacts——你应该从Sheet_Contacts里读取对应行的数据,而非模板工作表。
其他潜在问题
- 未处理未选中状态:如果ComboBox没有选中任何选项,
ListIndex会返回-1,此时selectedRow = -1 + 2 = 1,会错误读取第1行数据 - 代码触发逻辑缺失:这段代码需要放在ComboBox的
Change事件中,否则选中选项时不会自动执行
修复后的代码示例
Private Sub ComboBoxClientes_Change() Dim selectedRow As Long Dim wsContacts As Worksheet ' 指向正确的数据源工作表 Set wsContacts = ThisWorkbook.Sheets("Sheet_Contacts") ' 先判断是否有选中项 If Me.ComboBoxClientes.ListIndex = -1 Then MsgBox "请选择一个客户" Exit Sub End If ' ListIndex从0开始,对应Sheet_Contacts的第2行(假设表头在第1行) selectedRow = Me.ComboBoxClientes.ListIndex + 2 Dim cellValue1 As Variant Dim cellValue2 As Variant ' 从Sheet_Contacts提取数据 cellValue1 = wsContacts.Cells(selectedRow, "B").Value cellValue2 = wsContacts.Cells(selectedRow, "C").Value MsgBox "选中行: " & selectedRow & vbCrLf & "地址: " & cellValue1 End Sub
额外注意事项
- 确认ComboBox的
RowSource或ListFillRange确实指向Sheet_Contacts的目标区域,比如设置为Sheet_Contacts!A2:A100 - 如果要将数据写入其他工作表,可在获取值后直接赋值,示例:
ThisWorkbook.Sheets("目标工作表名").Range("D1").Value = cellValue1
内容的提问来源于stack exchange,提问作者Cesar Tepetla
相关产品推荐
相关产品推荐

