You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA从其他工作表填充ComboBox时出现运行时错误'438'

解决VBA填充ComboBox时的Run-time error '438'错误

你的代码出现438错误主要有两个问题:

  1. 错误地在Sheet_Contacts工作表上调用了属于Sheet_Invoice_Template的ComboBoxClientes控件,且工作表对象无法直接通过控件名称访问ActiveX控件。
  2. 直接将单元格区域的Value赋值给ComboBox的方式错误,需使用List属性来设置列表内容。

修正后的代码(两种可选方式)

方式一:通过OLEObjects访问ActiveX控件

Sub Add_ComboBox_From_Another_Worksheet()
    Dim contacts As Worksheet
    Dim comboSheet As Worksheet
    Dim targetCombo As OLEObject
    Dim sourceRange As Range
    
    Set contacts = ThisWorkbook.Worksheets("Sheet_Contacts")
    Set comboSheet = ThisWorkbook.Worksheets("Sheet_Invoice_Template")
    ' 获取目标ComboBox控件
    Set targetCombo = comboSheet.OLEObjects("ComboBoxClientes")
    ' 获取数据源范围(从A2到A列最后一行有数据的单元格)
    Set sourceRange = contacts.Range("A2:A" & contacts.Cells(contacts.Rows.Count, 1).End(xlUp).Row)
    
    ' 清空ComboBox原有内容,再赋值新列表
    targetCombo.Object.Clear
    targetCombo.Object.List = sourceRange.Value
End Sub

方式二:直接引用工作表的ActiveX控件

Sub Add_ComboBox_From_Another_Worksheet()
    Dim contacts As Worksheet
    Dim sourceRange As Range
    
    Set contacts = ThisWorkbook.Worksheets("Sheet_Contacts")
    ' 获取数据源范围
    Set sourceRange = contacts.Range("A2:A" & contacts.Cells(contacts.Rows.Count, 1).End(xlUp).Row)
    
    ' 操作目标工作表上的ComboBox
    With ThisWorkbook.Worksheets("Sheet_Invoice_Template").ComboBoxClientes
        .Clear
        .List = sourceRange.Value
    End With
End Sub

注意事项

  • 确认控件名称准确:打开开发工具的属性窗口(按F4),选中Sheet_Invoice_Template上的ComboBox,检查(名称)属性是否为ComboBoxClientes。
  • 若使用的是表单控件(而非ActiveX控件),需改用ListFillRange属性赋值,且控件名称格式通常为"Drop Down X",需对应调整。

内容的提问来源于stack exchange,提问作者Cesar Tepetla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:54:59