用户表单数据正在覆盖自身,而不是逐行输入。
我尝试了ActiveCell,Cell,Set和Range的不同组合。从互联网上获取出于类似目的的代码并进行调整均未成功。
R
我希望用户表单中的每个提交都填充一个新行,以创建一个列表。实际发生的是所有内容都写入第2行。
请以不赞成票和旗帜给反馈。
答案 0 :(得分:2)
Dim ws as Worksheet
Dim freeRow as long
Set ws = ActiveSheet 'Is it really necessary to use the active sheet?
freeRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row + 1 'End(xlUp) jumps to the next free cell
ws.Cells(freeRow, 2) = TextBox1.Text
ws.Cells(freeRow, 3) = TextBox2.Text
ws.Cells(freeRow, 4) = "OUT"
TextBox1.Text = ""
TextBox2.Text = ""
通常认为“ .select”是一种不好的做法,因为它可能导致奇怪/令人讨厌的错误-而不是使用变量(这会使您的代码更具可重用性,并且不易出错!)
答案 1 :(得分:0)
Private Sub CheckOut_Click()
Dim xCell As Range
' Loop through cells of first column. You can also use "A" instead of 1.
' Since you haven't used ActiveSheet with the ranges, it is also not
' needed here. It would be better to specify the worksheet e.g. "Sheet1".
For Each xCell In ActiveSheet.Columns(1).Cells
' Check if length of value of current cell is 0.
' Usually 'If xCell = "" Then' is used.
If Len(xCell) = 0 Then
' Select (Go to) current cell. What for?
xCell.Select
' Exit the For Next loop. Will jump to 'Range("B2") ...'
Exit For
End If
Next
' Write certain values to cells of 2nd row.
Range("B2").Value = TextBox1.Text
Range("C2").Value = TextBox2.Text
Range("D2").Value = ("OUT")
' Clear the Text boxes.
TextBox1 = ""
TextBox2 = ""
End Sub
简而言之,代码将检查第1列中是否有空单元格,将选择找到的单元格(原因不明),并将一些数据写入第二行的某些单元格并清除文本框的值
您遍历第1列。找到一个空单元格后,是否要将这些值写入找到的第一个空行中的BD列或写入第1列中的空单元格的同一行中的BD列?
是空还是相同?
您是否只希望在发现一个空单元格或在使用的第1列范围内为所有找到的空单元格发生一次?
一次还是全部?
第1列的使用范围例如A1或您选择上一个使用的单元格。
您可以通过选择第1列的最后一个单元格(“ A”)并按住RIGHT CTRL并按UP来手动确定最后使用的单元格。这将在代码中完成,但是如果您要查找更多的空单元格,这只是您的视觉检查。
A1或...?
您应该在问题中解决这些问题,您可以使用其下方的编辑按钮对其进行修改。
Private Sub CheckOut_Click()
Dim xCell As Range ' Current Cell in Column "A"
Dim FER As Long ' First Empty Row
' Loop through cells of Column "A".
For Each xCell In Columns("A")
' Check if value of Current Cell is "".
If xCell.Value = "" Then
' Select Current Cell. If necessary.
xCell.Select
' Calculate First Empty Row using column "B".
FER = Range("B" & Rows.Count).End(xlUp).Row + 1
' Write values to Target Cells in First Empty Row.
Range("B" & FER).Value = TextBox1.Text
Range("C" & FER).Value = TextBox2.Text
Range("D" & FER).Value = ("OUT")
' Clear the Text boxes.
TextBox1 = ""
TextBox2 = ""
Exit For ' Stop looping.
End If
Next
End Sub
这有什么意义?
如果OP没有告诉我们xCell.Select
会触发Selection Change
事件,该事件会将值写入xCell
和文本框并将其限制为{ {1}}?