Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 通过保持订单vba添加项目_Excel_Vba - Fatal编程技术网

Excel 通过保持订单vba添加项目

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行工作表列表中,

我有下面的清单,我应该在每张表格的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行工作表列表中,依此类推。 这是我的密码:

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
循环时会发生什么