【问题标题】:Loop rows for an Excel VBA calculationExcel VBA 计算的循环行
【发布时间】:2022-12-15 02:44:15
【问题描述】:

我有代码从单独的工作表中的三个不同列复制值。其中两列是文本字符串,最后一列是乘以用户输入的整数的数字。

有没有一种方法可以创建 For 循环或 Do 循环,从而使代码更简洁更短?

Global qty As Variant


Sub PartOrder()

qty = Application.InputBox("How many assemblies are needed?")

Sheets.Add After:=Worksheets(Sheets.Count)
PartOrderForm.Show

End Sub


Private Sub CompleteForm_Click()
If CheckBox1.Value = True Then

    ActiveSheet.Range("A1") = "Part Number"
    ActiveSheet.Range("B1") = "Part Name"
    ActiveSheet.Range("C1") = "Number of Parts Needed"
    
    ActiveSheet.Range("A2") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B7")
    ActiveSheet.Range("B2") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C7")
    ActiveSheet.Range("C2") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F7") * qty
    ActiveSheet.Range("A3") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B8")
    ActiveSheet.Range("B3") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C8")
    ActiveSheet.Range("C3") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F8") * qty
    ActiveSheet.Range("A4") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B9")
    ActiveSheet.Range("B4") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C9")
    ActiveSheet.Range("C4") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F9") * qty
    ActiveSheet.Range("A5") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B10")
    ActiveSheet.Range("B5") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C10")
    ActiveSheet.Range("C5") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F10") * qty
    ActiveSheet.Range("A6") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B11")
    ActiveSheet.Range("B6") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C11")
    ActiveSheet.Range("C6") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F11") * qty
    ActiveSheet.Range("A7") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B12")
    ActiveSheet.Range("B7") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C12")
    ActiveSheet.Range("C7") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F12") * qty
    ActiveSheet.Range("A8") = Worksheets("F8X SUSPENSION LINKS REV2").Range("B13")
    ActiveSheet.Range("B8") = Worksheets("F8X SUSPENSION LINKS REV2").Range("C13")
    ActiveSheet.Range("C8") = Worksheets("F8X SUSPENSION LINKS REV2").Range("F13") * qty

Else: End If
End Sub

【问题讨论】:

  • for i=2 to 8 | cells(i,1)= | cells(i,2)= | cells(i,3)= 这样的东西,你只有 6 行和 3 列,所以这没什么大不了的。
  • For i = 2 To 8 ActiveSheet.Cells(i - 1, 0) = Worksheets("F8X SUSPENSION LINKS REV2").Cells(8 - i, 2) Next i 这是正确的吗?它给了我一个错误。感谢您的帮助,您可以看出我对这个 @findwindow 还是个新手
  • 你的错误是因为没有0
  • @DarrellH 谢谢!我将 0 更改为 1,但它显示“应用程序定义或对象定义的错误”

标签: excel vba


【解决方案1】:

您在我发表评论后更改了代码。循环都是关于模式的。这是循环中代码的最后一个块。它还有助于缩进代码,以便您可以看到条件和循环的开始和结束位置。

Private Sub CompleteForm_Click()

    If CheckBox1.Value = True Then
        ActiveSheet.Range("A1") = "Part Number"
        ActiveSheet.Range("B1") = "Part Name"
        ActiveSheet.Range("C1") = "Number of Parts Needed"
    
        For x = 2 To 8
            ActiveSheet.Cells(x, 1) = Worksheets("F8X SUSPENSION LINKS REV2").Cells(x + 5, 2)
            ActiveSheet.Cells(x, 2) = Worksheets("F8X SUSPENSION LINKS REV2").Cells(x + 5, 3)
            ActiveSheet.Cells(x, 3) = Worksheets("F8X SUSPENSION LINKS REV2").Cells(x + 5, 6) * qty
        Next x

    End If

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2021-08-25
    • 2017-05-26
    • 2023-03-29
    相关资源
    最近更新 更多