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

VBA新手求助:用户窗体数据转多工作表报错+ComboBox加载月份代码

VBA问题解决:数据传输报错修复 + 月份列表实现

一、数据传输代码的错误修正

你的代码存在几个关键问题:

  • sh变量仅在UserForm_Initialize中定义,ComboBox1_Change过程中未声明和赋值,导致sh.Name.Cells调用失败
  • x1Up是拼写错误,应为xlUp(字母l,不是数字1)
  • 依赖工作表激活操作容易引发错误,直接操作工作表对象更可靠

修正后的完整代码:

Private Sub ComboBox1_Change()
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    
    ' 检查ComboBox是否为空
    If ComboBox1.Value = "" Then Exit Sub
    
    ' 获取目标工作表对象
    Set targetSheet = ThisWorkbook.Worksheets(ComboBox1.Value)
    
    ' 计算最后一行(无需激活工作表)
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row
    
    ' 写入数据
    targetSheet.Cells(lastRow + 1, 1).Value = TextBox1.Value
    targetSheet.Cells(lastRow + 1, 2).Value = TextBox2.Value
    targetSheet.Cells(lastRow + 1, 3).Value = ComboBox2.Value
    targetSheet.Cells(lastRow + 1, 4).Value = TextBox4.Value
    
    ' 提示成功并清空控件
    MsgBox "Data is added Successfully"
    TextBox1.Value = ""
    TextBox2.Value = ""
    ComboBox2.Value = ""
    TextBox4.Value = ""
    
    ' 返回主工作表(按需保留)
    ThisWorkbook.Worksheets("MASTERSHEET").Activate
    ThisWorkbook.Worksheets("MASTERSHEET").Cells(1, 1).Select
End Sub

Private Sub CommandButton2_Click()
    Unload UserForm1
End Sub

Private Sub UserForm_Initialize()
    Dim sh As Worksheet
    
    ' 填充工作表名称到ComboBox1
    ComboBox1.Clear
    For Each sh In ThisWorkbook.Worksheets
        ComboBox1.AddItem sh.Name
    Next sh
End Sub

二、ComboBox显示月份列表的代码

在UserForm_Initialize过程中添加对应代码,即可让目标ComboBox显示月份列表,以下提供两种常见格式:

方式1:显示中文月份(如1月、2月...12月)

' 插入到UserForm_Initialize中
ComboBox2.Clear
For i = 1 To 12
    ComboBox2.AddItem i & "月"
Next i

方式2:显示英文月份(如January、February...December)

' 插入到UserForm_Initialize中
ComboBox2.Clear
For i = 1 To 12
    ComboBox2.AddItem Format(DateSerial(Year(Date), i, 1), "mmmm")
Next i

整合后的完整UserForm_Initialize示例(中文月份):

Private Sub UserForm_Initialize()
    Dim sh As Worksheet
    Dim i As Integer
    
    ' 填充工作表名称到ComboBox1
    ComboBox1.Clear
    For Each sh In ThisWorkbook.Worksheets
        ComboBox1.AddItem sh.Name
    Next sh
    
    ' 填充中文月份到ComboBox2
    ComboBox2.Clear
    For i = 1 To 12
        ComboBox2.AddItem i & "月"
    Next i
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:00:59