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

隐藏Excel工作簿后UserForm的RowSource属性报运行时错误380

运行时错误380:隐藏工作簿后ListBox RowSource失效的原因及解决办法

核心原因

  • 当工作簿被隐藏时,RowSource仅用命名区域名称"Names"会失效,因为VBA默认从当前活动工作簿/工作表查找区域,隐藏的工作簿不会处于活动状态,导致无法定位目标区域,触发380错误。
  • 若命名区域"Names"的作用域是工作表级(而非工作簿级),隐藏对应工作表后也会出现同样的定位失败问题。

修复方案

方案1:指定完整的区域引用路径

给RowSource加上工作簿和工作表的完整路径,让VBA能精准定位到目标区域,不受工作簿隐藏影响:

' 替换为你的数据所在工作簿和工作表名称
Me.ListBox1.RowSource = ThisWorkbook.Worksheets("员工数据").Range("Names").Address(External:=True)
Me.ListBox1.ColumnCount = 3
Me.ListBox1.ColumnHeads = True

方案2:改用ListFillRange属性

ListFillRange对隐藏工作簿的兼容性比RowSource更好,同样指定完整路径即可:

Me.ListBox1.ListFillRange = ThisWorkbook.Worksheets("员工数据").Range("Names").Address(External:=True)
Me.ListBox1.ColumnCount = 3
Me.ListBox1.ColumnHeads = True

方案3:手动加载数据(最稳定灵活)

完全绕开区域引用的限制,通过代码把数据逐行加载到ListBox,不管工作簿/工作表是否隐藏都能正常工作:

Dim dataRange As Range
Set dataRange = ThisWorkbook.Worksheets("员工数据").Range("Names")

Me.ListBox1.Clear
Me.ListBox1.ColumnCount = 3
Me.ListBox1.ColumnHeads = True

' 写入表头
Me.ListBox1.AddItem
Me.ListBox1.List(0, 0) = dataRange.Cells(1, 1).Value
Me.ListBox1.List(0, 1) = dataRange.Cells(1, 2).Value
Me.ListBox1.List(0, 2) = dataRange.Cells(1, 3).Value

' 写入数据行
Dim i As Long
For i = 2 To dataRange.Rows.Count
    Me.ListBox1.AddItem
    Me.ListBox1.List(i - 1, 0) = dataRange.Cells(i, 1).Value
    Me.ListBox1.List(i - 1, 1) = dataRange.Cells(i, 2).Value
    Me.ListBox1.List(i - 1, 2) = dataRange.Cells(i, 3).Value
Next i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:03