【发布时间】:2018-09-29 17:18:26
【问题描述】:
我正在尝试将一些代码放在一起进行一些简单的计算,但我很难通过 If 语句,它们对我来说似乎没有意义,但我的格式与我读过的解决方案相同类似的问题。
我在以下的最后一个 End If 上得到“End If without block If”:
Sub SAP1C()
Dim i1, j1 As Range
Dim Material, Customer, Price As String
Dim MaterialStart, CustomerStart, PriceStart As Object
Dim Counter As Integer
Set i1 = Sheets("Invoice Prices").Range("B1:RL1")
Set j1 = Sheets("Invoice Prices").Range("A6:A500")
Set PriceStart = Sheets("SAP 1C").Range("A3")
Set MaterialStart = Sheets("SAP 1C").Range("J3")
Set CustomerStart = Sheets("SAP 1C").Range("I3")
Counter = 0
For Each i In i1
If i = "" Then Exit Sub Else
For Each j In j1
If j <> "" Then
Price = Cells(Application.WorksheetFunction.Row(j), Application.WorksheetFunction.Column(i)).Value
Material = Application.WorksheetFunction.VLookup(j, Sheets("BTS").Range("F:G"), 2, 0)
Customer = Application.WorksheetFunction.Text(Application.WorksheetFunction.VLookup(i, Sheets("Customer Hub").Range("A:G"), 7, 0), "0000000000")
PriceStart.Offset(Counter, 0) = Price
MaterialStart.Offset(Counter, 0) = Material
CustomerStart.Offset(Counter, 0) = Customer
Counter = Counter + 1
End If
Next j
End If
Next i
End Sub
我对代码进行了一些尝试,但还不太明白 - 有什么想法吗?
谢谢!
编辑:在下面回答 - 非常感谢!
我稍微更改了代码并对其进行了修改,以尝试使其超出原始问题的范围,但我遇到了错误。请您看一下下面的内容吗?:
Sub SAP1C()
Dim i1, j1 As Range
Dim Material, Customer, Price As String
Dim MaterialStart, CustomerStart, PriceStart As Object
Dim Counter As Integer
Set i1 = Sheets("Invoice Prices").Range("B1:RL1")
Set j1 = Sheets("Invoice Prices").Range("A6:A300")
Set PriceStart = Sheets("SAP 1C").Range("A3")
Set MaterialStart = Sheets("SAP 1C").Range("J3")
Set CustomerStart = Sheets("SAP 1C").Range("I3")
Counter = 0
For Each i In i1
If i = "" Then
Exit Sub
Else
For Each j In j1
If j <> "" Then
If Application.WorksheetFunction.IsText(Sheets("Invoice Prices").Cells(j.Row, i.Column)) Then
Price = "POA"
ElseIf Application.WorksheetFunction.IsErr(Sheets("Invoice Prices").Cells(j.Row, i.Column)) Then
Price = "POA"
Else
Price = Round(Sheets("Invoice Prices").Cells(j.Row, i.Column).Value, 1)
Material = Application.WorksheetFunction.VLookup(j, Sheets("BTS").Range("F:G"), 2, 0)
Customer = "00" & Application.WorksheetFunction.VLookup(i, Sheets("Customer Hub").Range("A:G"), 7, 0)
PriceStart.Offset(Counter, 0) = Price
MaterialStart.Offset(Counter, 0) = Material
CustomerStart.Offset(Counter, 0) = Customer
Counter = Counter + 1
End If
Next j
End If
Next i
End Sub
“Next j”上的“Next without For”?这究竟是如何工作的?我的 Ifs 都有 End Ifs 或似乎都以某种方式关闭,我的 For Each 也都有 Next's。一切似乎都顺理成章,所以我真的很困惑我在这里缺少什么。谢谢!
【问题讨论】:
-
mmh不确定那些
Next j和Next i不应该只是Next吗? -
Next <iterated variable here>是 VBA 的良好语法。它更冗长,但有助于提高高度嵌套代码的可读性 -
@DavidColwell 对,今天学到的新东西,耶 o/
-
非常感谢您的回复 - 我使用 Next i 和 Next j 因为它更易于阅读,但老实说我不知道它可能只是“Next”。我已经更新了我的问题,因为我在原来的下面遇到了一个不同的错误,现在已经排序。 :)