首页 > 解决方案 > Excel VBA表单,仅当每行中某个单元格中的值大于> 0时如何提交多行

问题描述

我目前正在尝试使用 VBA 代码和一些公式在 Excel 2016 中创建数据条目,使用户能够从下拉列表中选择产品,以自动计算构成产品的每种原材料所需的数量和订单金额。

我的工作簿由 4 张标题为

“iform” -允许用户从下拉列表中选择产品、输入日期和数量的表单。然后表单会自动提取产品的描述。然后在下表中列出了制造该产品所需的所有零件,其中包括手头数量、订单数量、已分配、每 1 个产品所需的数量以及需要多少

"ordermaster" -每当用户从 "iform" 提交表单时,都会使用请求的零件和金额更新空白列表

“bomitemqty” -包含所有最终产品及其部件的列表。此列表中包含的其他信息:当前手头数量、分配数量和每 1 个最终生产产品所需的数量

“fgmaster” -包含所有最终产品的列表

除了当我从“iform”提交表单时,我 似乎无法让它只将“需要数量”> 0的行发送到“ordermaster”中的列表。下面提供的屏幕截图和代码。下面以黄色突出显示的行是我不想移到“masterorder”列表中的行

截图: iform 图像

使用以下公式填充包含所有零件和数量的单元格(此数据使用 fg num 从“bomitemqty”中提取,上面用红色圈出,以过滤所需的行:

=IFERROR(INDEX(bomitem[PartNum]:bomitem[qtyperunit], SMALL(IF(COUNTIF($G$6,bomitem), MATCH(ROW(bomitem), ROW(bomitem)), ""), ROWS(E$13:$E14)), COLUMNS(bomitemqty!$B$2:B3)),"--")

所需数量使用以下公式计算:

=IFERROR((($L$8*J13)+I13)-(G13+H13),"")

当用户点击保存按钮时,执行以下模块并将“iform”中的数据移动到工作表“masterorder”屏幕截图和下面的代码中的列表(下面的屏幕截图中以黄色突出显示的行和我不想跨过去)

屏幕截图: 提交了示例数据的“ordermaster”表

VBA代码:

Sub Save()

Set frm = ThisWorkbook.Sheets("iform")

Set Source = ThisWorkbook

Dim Var1 As Integer
Dim Var2 As Integer
Dim Var3 As Integer

Set Wks = Source.Worksheets("iform")

Var1 = Application.WorksheetFunction.CountIf(Wks.Range("E13:E29"), "--")

Var2 = 17 - Var1

Var3 = 30 - Var2 - 1


    Dim lr As Long, ws As Worksheet
    Dim arr As Variant, i As Long

    With Worksheets("iform")
        lr = .Cells(30, "E").End(xlUp).Row - Var3
        ReDim arr(1 To lr, 1 To 9)
        For i = LBound(arr, 1) To UBound(arr, 1)
            arr(i, 1) = ""
            arr(i, 2) = ""
            arr(i, 3) = .Cells(i + 12, "E").Value
            arr(i, 4) = ""
            arr(i, 5) = ""
            arr(i, 6) = .Cells(i + 12, "L").Value
            arr(i, 7) = .Cells(6, "L").Value
            arr(i, 8) = ""
            arr(i, 9) = [Text(Now(), "DD-MM-YYYY HH:MM:SS")]
        Next i
    End With

    With Worksheets("ordermaster")
        lr = .Range("C" & .Rows.count).End(xlUp).Row + 1
        .Cells(lr, "A").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
    


End Sub




Option Explicit

私有子 cmdSave_Click()

            Call Save

End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range)

结束子

标签: excelvbaexcel-formuladataform

解决方案


VBasic2008 在上面的评论中发布了一个答案,解决了我的问题:) ...

就在 Fori = ...添加该行之后If .Cells(i + 12, "L").Value > 0然后在 Next 之前添加该行End If


推荐阅读