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
相关产品推荐
相关产品推荐

