我正在尝试创建一个UserForm,当我选择一个命令按钮时,它将打开。它的目的是从选定的关于“旅游”的行中获取数据--即旅游代码、开始日期和结束日期,然后由我“拆分”旅游,为此我需要输入新的旅游代码、开始日期和结束日期。
我需要从表单中的数据进入一个单独的表格(称为“拆分”),这样我就可以在一张纸中记录原始的旅游细节和新的旅游细节。但是当我试图运行宏时,我会得到一个运行时错误'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的前三个单元格,然后我将使用该表单输入新数据。
Close命令部分只是表单上要退出的单独按钮。
如何获得表单,当我单击“拆分旅游”命令按钮,将数据输入到下一个“拆分”表的空行中?
提前谢谢你的帮助。
发布于 2019-01-16 10:33:17
erow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row代码中有两个错误。首先,命令是xlUp,而不是x1Up -- "xl“是”Option Explicit“的缩写,而不是xl-这是一个非常好的例子,说明了为什么您几乎总是应该使用Option Explicit。
第二:您的代码- is将尝试将单元格中的.Value放入非类型化变量erow --因为单元格是空白的(作为最后一个单元格下面的单元格具有数据),这意味着erow将始终 be 0。而第0行不存在将数据放入。
相反,通过使用Range.Row,我们获得要插入数据的下一行号。
发布于 2019-01-16 10:13:01
你离我太近了
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发布于 2019-01-16 10:27:41
不需要对象变量
结束参数是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 Subhttps://stackoverflow.com/questions/54214685
复制相似问题