EXCEL VBA动态数据输入

时间:2012-12-26 16:56:06

标签: excel vba

enter image description here

  1. 范围内的红色框(“D:D”)是Me.ComboBox1.Value
  2. 中的参考值
  3. 黄色和绿色分别来自Me.TextBox1Me.TextBox2的数据。在Me中,Me.TextBox1Me.TextBox2中的值将根据Me.ComboBox1中选择的值插入此工作表。
  4. 因此,在这种情况下,我希望黄色和绿色相应地输入用户选择的红色。
  5. 另外一件事是我为最后一行黄色和绿色数据添加了.OffSet(1,0).EntireRow.Insert

2 个答案:

答案 0 :(得分:1)

这应该这样做:

nextrow = Sheets("DB Cust").Range("C" & Sheets("DB Cust").Rows.Count).End(xlUp).Row + 1

更新在您进行编辑之后,我认为类似的内容可能就是您所需要的。请注意,这取决于每个数据块的E列中始终存在一个值,以使其起作用:

Dim lngNewRow As Long
Dim strLookupValue As String

strLookupValue = "A" ' or B/C/D etc.

lngNewRow = Sheets("DB Cust").Range("D:D").Find(strLookupValue).Offset(, 1).End(xlDown).Row + 1
Sheets("DB Cust").Rows(lngNewRow).Insert
Sheets("DB Cust").Cells(lngNewRow, "E").Value = "Data for column E"
Sheets("DB Cust").Cells(lngNewRow, "F").Value = "Data for column F"

关于你的第4点,如果“D”是列表中的最后一个值,那么为什么你需要插入额外的空白行,大概是它下面的所有行都是空白的?

答案 1 :(得分:0)

我不确定,但你打电话给你的范围的方式对我来说似乎很奇怪。尝试一种不同的方式来定义您的计数范围。

改变这个:

nextrow = WorksheetFunction.CountA(Sheets("DB Cust").Range("C:C")) + 2

对此:

Dim myWB as Workbook, DBcust as Worksheet
Set myWB = Excel.ActiveWorkbook
Set DBcust = myWB.Worksheets("DB Cust")

nextrow = Excel.WorksheetFunction.CountA(DBcust.Range(DBcust.Cells(1,3),DBcust.Cells(DBcust.UsedRange.Rows.Count,3)) + 2

我将书籍和工作表分配给变量以获得更高的可靠性,但如果您愿意,可以再次明确说明它们。此代码假定工作簿是当前活动的工作簿,如果不是,则必须使用工作簿名称设置变量。

此外,看起来您不需要“With”块中的偏移功能的“rfound”部分。 。 。这就是“With”的用武之地。这只是一件小事,但像这样无意义的代码只会让你更加头痛,所以我的建议是把它拿出来。

我没有将其加载到VBA IDE中,因此请仔细检查拼写错误。谢谢!

更新:

在阅读完评论后,我仔细研究了您的代码以及您正在尝试做什么。看起来你正试图将textbox1的值(无论可能是什么......如果你稍微解释一下这会有所帮助)放入一个偏离用户在combobox1中定义的搜索结果位置的单元格中。 nextrow变量位于行偏移参数内,但该位置已经是您想要的位置。尝试更改此内容:

With rfound

rfound.Offset(nextrow, 1).Value = TextBox1.Value
rfound.Offset(nextrow, 2).Value = TextBox1.Value
rfound.Offset(nextrow, 3).Value = TextBox1.Value
rfound.Offset(nextrow, 4).Value = TextBox1.Value
rfound.Offset(nextrow, 5).Value = TextBox1.Value
rfound.Offset(nextrow, 6).Value = TextBox1.Value
rfound.Offset(nextrow, 7).Value = TextBox1.Value
rfound.Offset(nextrow, 8).Value = TextBox1.Value
MsgBox ("Data entry success")

End With

对此:

With rfound

.Offset(0, 1).Value = TextBox1.Value
.Offset(0, 2).Value = TextBox1.Value
.Offset(0, 3).Value = TextBox1.Value
.Offset(0, 4).Value = TextBox1.Value
.Offset(0, 5).Value = TextBox1.Value
.Offset(0, 6).Value = TextBox1.Value
.Offset(0, 7).Value = TextBox1.Value
.Offset(0, 8).Value = TextBox1.Value
MsgBox ("Data entry success")

End With

您可能会注意到我也根据我之前的建议删除了多余的“rfound”。看看这是否有效,如果是,你可能想要一起删除newrow变量。

祝你好运,让我们知道它是怎么回事。