Excel 将数据从combobox复制到表中,以连续行为单位

Excel 将数据从combobox复制到表中,以连续行为单位,excel,vba,Excel,Vba,我正在使用三个显示特定数据的组合框。当我点击一个按钮时,我想将所选数据发送到一个给定的表,该表位于与代码执行位置不同的工作表中。到目前为止,这就是我所拥有的: Private Sub BotonAgregar_Click() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("_items") ws.Cells(2, 1) = CajaMes ws.Cells(2, 2) = CajaConcepto ws.Cells(2, 3) = Caja

我正在使用三个显示特定数据的组合框。当我点击一个按钮时,我想将所选数据发送到一个给定的表,该表位于与代码执行位置不同的工作表中。到目前为止,这就是我所拥有的:

Private Sub BotonAgregar_Click()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("_items")

ws.Cells(2, 1) = CajaMes
ws.Cells(2, 2) = CajaConcepto
ws.Cells(2, 3) = CajaValor

CajaMes = Empty
CajaConcepto = Empty
CajaValor = Empty

End Sub
在这段代码中,我成功地将所有三个字段的数据发送到所需单元格中的tab_项,但只是第一个实例。如果我想发送更多数据,第一行将被替换。我想把所有的东西都放到下一行。有什么帮助吗?

如果那些人。。。如果您的组合框位于用户窗体上,并且您使用空框使其不显示任何项目,请测试此代码:

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("_items")

ws.Cells(2, 1).value = Me.CajaMes.value
ws.Cells(2, 2).value = Me.CajaConcepto.value
ws.Cells(2, 3).value = Me.CajaValor.value

Me.CajaMes.ListIndex = -1
Me.CajaConcepto.ListIndex = -1
Me.CajaValor.ListIndex = -1
但是,如果没有组合值,没有选择任何项目,函数将在该特定行返回错误

如果您的组合框是ActiveX类型,请停留在页面上,尝试下一个代码:

Dim ws As Worksheet, cbCM As ComboBox, cbCon As ComboBox, cbCjV As ComboBox
    Set ws = ActiveSheet
      Set cbCM = ws.OLEObjects("CajaMes").Object
      Set cbCon = ws.OLEObjects("CajaConcepto").Object
      Set cbCjV = ws.OLEObjects("CajaValor").Object
    ws.Cells(2, 1).value = cbCM.value
    ws.Cells(2, 2).value = cbCon.value
    ws.Cells(2, 3).value = cbCjV.value

    cbCM.ListIndex = -1
    cbCon.ListIndex = -1
    cbCjV.ListIndex = -1

问题是您没有更新要将数据发送到的行号,这就是为什么它会不断覆盖同一行的单元格

获取表中最后一个空行的方法有很多,具体取决于数据的设置方式,但下面是一个简单的示例:

Private Sub BotonAgregar_Click()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("_items")

Dim LastRow As Long
'getting the last row, nb. we add 1 to the LastRow so we put the data in the next empty line
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
If LastRow < 2 Then LastRow = 2 'just making sure it starts at 2 and not lower

ws.Cells(LastRow, 1) = Me.CajaMes.value
ws.Cells(LastRow, 2) = Me.CajaConcepto.value
ws.Cells(LastRow, 3) = Me.CajaValor.value

Me.CajaMes.value = Null
Me.CajaConcepto.value = Null
Me.CajaValor.value = Null

End Sub

这应该可以满足你的要求了

对不起,伙计,它不起作用了。我只是想说清楚:三个卡贾。。。是组合框的名称。empty用于在按下按钮后清除所有三个组合框。这些组合框是否像我想象的那样保留在用户窗体上?什么是不工作?如果您收到错误,在哪一行和哪一个数字/描述?是的,它们是用户表单的一部分。我得到的错误:编译错误:找不到方法或数据成员。在代码中,行Me.CajaValor.ListIndex=-1的.ListIndex项被突出显示。您真的是说Me.CajaValor.ListIndex=-1返回了一个错误,而前两行没有返回错误吗?谢谢,但是没有发生任何事情。它没有将任何值复制到表中,但我也没有得到任何错误。也许这会有所帮助:表是超级基本的,它有三列,标题在第1行。宏应该从第2行开始复制。我已经编辑了上面的代码,所以它现在应该可以工作了。我忘了把.value放在组合框旁边,这就是为什么什么都没发生。如果它现在起作用,那么不要忘记将答案标记为正确,否则请让我知道