Excel 通过保持订单vba添加项目
我有下面的清单,我应该在每张表格的B栏中添加项目;列表1、列表2、列表3和列表4: 我需要在a列的数字上设置一个条件,要添加新项目,我需要从组合框中指定模型,在组合框中我有4个选项(M1、M2、M3、M4),以选择应添加项目的表(该部分工作正常)。 第二个条件是从组合框中选择一个从001到300的数字,以便能够将我的项目添加到B列的正确位置,因此如果我选择006,modele M1我的数据应该在工作表列表中的B列第7行,如果我选择007,modele M1我的数据应该在B列第8行工作表列表中,如果我选择010,modele M2,我的数据添加到B列第11行工作表列表中,依此类推。 这是我的密码:Excel 通过保持订单vba添加项目,excel,vba,Excel,Vba,我有下面的清单,我应该在每张表格的B栏中添加项目;列表1、列表2、列表3和列表4: 我需要在a列的数字上设置一个条件,要添加新项目,我需要从组合框中指定模型,在组合框中我有4个选项(M1、M2、M3、M4),以选择应添加项目的表(该部分工作正常)。 第二个条件是从组合框中选择一个从001到300的数字,以便能够将我的项目添加到B列的正确位置,因此如果我选择006,modele M1我的数据应该在工作表列表中的B列第7行,如果我选择007,modele M1我的数据应该在B列第8行工作表列表中,
Private Sub CommandButton1_Click()
Dim fin_liste As Range, ligne As Long, ws_lame As Worksheet, ctrl As Boolean
Set ws_lame = ActiveWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value)
Set fin_liste = ThisWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
For j = 2 To fin_liste
If ws_lame.Range("A" & j) = Me.ComboBox_Num.Value Then
ctrl = True
fin_liste = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
Exit For
End If
Next
If ctrl = False Then
j = fin_liste + 1
ws_lame.Range("A" & j).Value = Me.ComboBox_Num.Value
fin_liste = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
End If
End Sub
我的代码的问题是它不尊重我选择的数字,它只是一个接一个地添加项目,我应该做什么编辑?谢谢
变量“j”对于循环,我将更改为“ligne”
根据你的解释,如果你像我之前给你的那样使用这个代码,你就不能满足第二个条件
fin\u liste=thispoolk.Worksheets(combo.Value)、Cells(Rows.Count,“B”)、End(xlUp)、Offset(1,0)
因此,即使您选择001和300之间的数字,它仍然会将数据精确地添加到列“B”的最后一行。
例如,如果单元格“B3”(B4仍然为空)上的最后一个数据,则选择数字5(希望数据将添加到“B6”),数据将添加到“B4”
然后,您可能会发现您可以更改.offset(ComboBox\u Num.Value,0)
,但这会使数据变得一团糟。
我之前给你的代码对第二种情况无效
根据第二个条件,您可以使用此选项
fin\u liste=thispoolk.Worksheets(combo.Value).单元格(ComboBox\u Num.Value,“B”).偏移量(1,0)
我仍然写.offset(1,0)
,因为我认为您想在单元格“B2”上添加第一个数据,对吗?
实际上那个代码有一个问题,但基于你们的问题,我认为那个问题不会影响你们。你很快就会发现的。(你应该考虑扎克的评论)
我已经重写了你的代码,这样我可以在我的excel上更轻松地尝试它。您可以将其更改为您的版本
Private Sub CommandButton1_Click()
Dim fin_liste As Range, ligne As Long, ws_lame As Worksheet, ctrl As Boolean
Set ws_lame = ActiveWorkbook.Worksheets(combo.value)
Set fin_liste = ThisWorkbook.Worksheets(combo.Value).Cells(combo2.Value, "B").Offset(1, 0) '.End(xlUp).Offset(combo2.Value, 0)
For ligne = 2 To fin_liste
If ws_lame.Range("A" & ligne) = combo2.Value Then
ctrl = True
fin_liste = text.Value
End If
Next
If ctrl = False Then
ligne = fin_liste + 1
ws_lame.Range("A" & ligne) = combo2.Value
fin_liste = text.Value
End If
End Sub
变量“j”对于循环,我将更改为“ligne”
根据你的解释,如果你像我之前给你的那样使用这个代码,你就不能满足第二个条件
fin\u liste=thispoolk.Worksheets(combo.Value)、Cells(Rows.Count,“B”)、End(xlUp)、Offset(1,0)
因此,即使您选择001和300之间的数字,它仍然会将数据精确地添加到列“B”的最后一行。
例如,如果单元格“B3”(B4仍然为空)上的最后一个数据,则选择数字5(希望数据将添加到“B6”),数据将添加到“B4”
然后,您可能会发现您可以更改.offset(ComboBox\u Num.Value,0)
,但这会使数据变得一团糟。
我之前给你的代码对第二种情况无效
根据第二个条件,您可以使用此选项
fin\u liste=thispoolk.Worksheets(combo.Value).单元格(ComboBox\u Num.Value,“B”).偏移量(1,0)
我仍然写.offset(1,0)
,因为我认为您想在单元格“B2”上添加第一个数据,对吗?
实际上那个代码有一个问题,但基于你们的问题,我认为那个问题不会影响你们。你很快就会发现的。(你应该考虑扎克的评论)
我已经重写了你的代码,这样我可以在我的excel上更轻松地尝试它。您可以将其更改为您的版本
Private Sub CommandButton1_Click()
Dim fin_liste As Range, ligne As Long, ws_lame As Worksheet, ctrl As Boolean
Set ws_lame = ActiveWorkbook.Worksheets(combo.value)
Set fin_liste = ThisWorkbook.Worksheets(combo.Value).Cells(combo2.Value, "B").Offset(1, 0) '.End(xlUp).Offset(combo2.Value, 0)
For ligne = 2 To fin_liste
If ws_lame.Range("A" & ligne) = combo2.Value Then
ctrl = True
fin_liste = text.Value
End If
Next
If ctrl = False Then
ligne = fin_liste + 1
ws_lame.Range("A" & ligne) = combo2.Value
fin_liste = text.Value
End If
End Sub
您是否尝试过单步执行代码?您有一个
For
循环,该循环将Variant
数据类型j
(由于您没有声明j
,默认情况下它将被设置为Variant
)与范围
数据类型进行比较。即使j
是Long
数据类型,fin_liste
也是一个对象(Range
数据类型)。尝试单步执行,看看当您获得循环的时会发生什么。您是否尝试单步执行代码?您有一个For
循环,该循环将Variant
数据类型j
(由于您没有声明j
,默认情况下它将被设置为Variant
)与范围
数据类型进行比较。即使j
是Long
数据类型,fin_liste
也是一个对象(Range
数据类型)。尝试单步执行,看看当您得到For
循环时会发生什么