【问题标题】:EXCEL VBA Dynamic Data EntryEXCEL VBA 动态数据输入
【发布时间】:2012-12-27 19:00:53
【问题描述】:

  1. Range("D:D") 中的红色颜色框是来自Me.ComboBox1.Value 的值
  2. 黄色和绿色分别是来自Me.TextBox1Me.TextBox2 的数据。在 Me 中,Me.TextBox1Me.TextBox2 中的值将根据 Me.ComboBox1 中选择的值插入到此工作表中。
  3. 因此,在这种情况下,我希望根据用户选择的红色输入黄色和绿色。
  4. 另一个额外的事情是我为最后一行黄色和绿色数据添加了.OffSet(1,0).EntireRow.Insert

【问题讨论】:

    标签: excel vba


    【解决方案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”是列表中的最后一个值,那么您为什么需要插入额外的空白行,大概它下面的所有行都是空白的?

    【讨论】:

    • 我已经编辑了我的问题以便更好地理解。感谢您的努力。
    【解决方案2】:

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

    改变这个:

    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 变量。

    祝你好运,让我们知道进展如何。

    【讨论】:

    • 我需要一个公式将突出显示的红色 1 放入单元格 c2 然后继续 c3,c4,c4.. 等等。
    • 为了更好地理解,我在上面编辑了我的问题。请看一看。
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多