我正在尝试创建一个用户窗体,该窗体将在我选择命令按钮时打开。它的目的是从所选行中获取有关“行程”的数据-即行程代码,开始日期和结束日期,然后让我“拆分”行程,为此我需要输入新的行程代码,开始日期和结束日期。
我需要将表单中的数据放入单独的工作表(称为“拆分”)中,以便在一张工作表中记录原始游览详细信息和新游览详细信息。但是,当我尝试运行宏时,出现运行时错误“ 1004”(应用程序定义的错误或对象定义的错误)。我是VBA的新手,我不知道自己做错了什么!
到目前为止,这是我的代码:
Private Sub UserForm_Initialize()
With Me
.OriginalTourCode.Value = Cells(ActiveCell.Row, "A").Value
.OriginalStartDate.Value = Cells(ActiveCell.Row, "B").Value
.OriginalEndDate.Value = Cells(ActiveCell.Row, "C").Value
End With
End Sub
Private Sub SplitTourCommand_Click()
Dim ctrl As Control
Dim ws As Worksheet
Set ws = Sheets("Splits")
erow = ws.Cells(Rows.Count, 1).End(x1Up).Offset(1, 0)
Cells(erow, 1) = OriginalTourCode.Text
Cells(erow, 2) = OriginalStartDate.Text
Cells(erow, 3) = OriginalEndDate.Text
Cells(erow, 4) = NewTourCode1.Text
Cells(erow, 5) = NewStartDate1.Text
Cells(erow, 6) = NewEndDate1.Text
Cells(erow, 7) = NewTourCode2.Text
Cells(erow, 8) = NewStartDate2.Text
Cells(erow, 9) = NewEndDate2.Text
Cells(erow, 10) = ReasonForSplit.Text
End Sub
Private Sub CloseCommand_Click()
Unload Me
End Sub
Userform Intitialise部分自动填充UserForm的前三个单元格,然后我将使用该表单输入新数据。
“关闭命令”部分只是表单上的一个单独按钮,可以退出。
当我单击“拆分游览”命令按钮时,如何将表单输入数据到“拆分”工作表的下一个空行中?
非常感谢您的帮助。
答案 0 :(得分:0)
你是如此亲近
Dim ctrl As Control
Dim ws As Worksheet
Set ws = Sheets("Splits")
erow = ws.Cells(Rows.Count, 1).End(x1Up).Offset(1, 0)
ws.Cells(erow, 1) = OriginalTourCode.Text
ws.Cells(erow, 2) = OriginalStartDate.Text
ws.Cells(erow, 3) = OriginalEndDate.Text
ws.Cells(erow, 4) = NewTourCode1.Text
ws.Cells(erow, 5) = NewStartDate1.Text
ws.Cells(erow, 6) = NewEndDate1.Text
ws.Cells(erow, 7) = NewTourCode2.Text
ws.Cells(erow, 8) = NewStartDate2.Text
ws.Cells(erow, 9) = NewEndDate2.Text
ws.Cells(erow, 10) = ReasonForSplit.Text
End Sub
答案 1 :(得分:0)
结束参数为 xlUp
而不是x1Up
。
Option Explicit
Private Sub SplitTourCommand_Click()
Const cSheet As String = "Splits"
Dim erow As Long
Dim vnt As Variant
ReDim vnt(1 To 1, 1 To 10) As String
vnt(1, 1) = OriginalTourCode.Text
vnt(1, 2) = OriginalStartDate.Text
vnt(1, 3) = OriginalEndDate.Text
vnt(1, 4) = NewTourCode1.Text
vnt(1, 5) = NewStartDate1.Text
vnt(1, 6) = NewEndDate1.Text
vnt(1, 7) = NewTourCode2.Text
vnt(1, 8) = NewStartDate2.Text
vnt(1, 9) = NewEndDate2.Text
vnt(1, 10) = ReasonForSplit.Text
With Worksheets(cSheet)
erow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(erow, 1).Resize(, 10) = vnt
End With
End Sub
Option Explicit
Private Sub SplitTourCommand_Click()
Const cSheet As String = "Splits"
Dim erow As Long
With Worksheets(cSheet)
erow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(erow, 1) = OriginalTourCode.Text
.Cells(erow, 2) = OriginalStartDate.Text
.Cells(erow, 3) = OriginalEndDate.Text
.Cells(erow, 4) = NewTourCode1.Text
.Cells(erow, 5) = NewStartDate1.Text
.Cells(erow, 6) = NewEndDate1.Text
.Cells(erow, 7) = NewTourCode2.Text
.Cells(erow, 8) = NewStartDate2.Text
.Cells(erow, 9) = NewEndDate2.Text
.Cells(erow, 10) = ReasonForSplit.Text
End With
End Sub
答案 2 :(得分:0)
erow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
您的代码中有2个错误。首先,命令是xlUp
,而不是x1Up
-“ xl”是“ Excel”的缩写,而不是“ X One”-这是为什么您几乎总是使用{{3} }
第二:由于您的代码是空白的(如下面的 ,因此您的代码将按原样尝试将单元格中的.Value
放入无类型变量erow
中。最后一个包含数据的单元格),这意味着erow
将始终为0
。而且第0行不存在要放入数据的地方。
相反,通过使用Range.Row
,我们获得了下一行用于在其上插入数据的行号