Excel 计算循环时间';不工作vba

Excel 计算循环时间';不工作vba,excel,vba,Excel,Vba,我试图使用一些条件值和循环从范围M13:M22计算,但我的一些代码只在单元格M13中工作,而不循环到单元格M22。我如何解决这个问题 这是我的密码: Private Sub CommandButton1_Click() Dim pelanggan As Range, alamat As Range, diskon As Range, jdiskon As Range, tanggal As Range, jtempo As Range Dim rout(1 To 10) As

我试图使用一些条件值和循环从范围
M13:M22
计算,但我的一些代码只在单元格
M13
中工作,而不循环到单元格
M22
。我如何解决这个问题

这是我的密码:

Private Sub CommandButton1_Click()

    Dim pelanggan As Range, alamat As Range, diskon As Range, jdiskon As Range, tanggal As Range, jtempo As Range
    Dim rout(1 To 10) As Variant, i As Long
    Dim path As String

    path = "\\Faizal\Data D Faizal\Daftar Harga\Price List"
    Filename = Dir(path & "database.xlsx")

    Set pelanggan = Range("E7")
    Set alamat = Range("E8")
    Set diskon = Range("L25")
    Set tanggal = Range("L7")
    Set jdiskon = Range("P13")
    Set jtempo = Range("K30")

    getalamat = Application.WorksheetFunction.VLookup(pelanggan & Range("J7"), Workbooks("database.xlsx").Worksheets("DB").Range("A6:N1350"), 14, False)
    getdiskon = Application.WorksheetFunction.VLookup(pelanggan & Range("J7"), Workbooks("database.xlsx").Worksheets("DB").Range("A6:N1350"), 6, False)
    getjdiskon = Application.WorksheetFunction.VLookup(pelanggan & Range("J7"), Workbooks("database.xlsx").Worksheets("DB").Range("A6:N1350"), 11, False)
    getjtempo = Application.WorksheetFunction.VLookup(pelanggan & Range("J7"), Workbooks("database.xlsx").Worksheets("DB").Range("A6:N1350"), 13, False)

    alamat.Value = getalamat
    diskon.Value = getdiskon / 100
    jdiskon.Value = getjdiskon
    tanggal.Value = DateValue(Now)
    jtempo.Value = getjtempo
    'here is the calculation that won't go loop
    For i = 13 To 22
        getharga = Application.WorksheetFunction.VLookup(Range("D" & i) & Range("E" & i), Workbooks("database.xlsx").Worksheets("Gold").Range("E4:H80"), 4, False)
        If jdiskon = "Nett" Then
            Range("M" & i).Value = getharga - (getharga * diskon)
            Range("L25").ClearContents
        ElseIf jdiskon = "Pot" Then
            Range("M" & i).Value = getharga
            Range("L25").Value = diskon
        ElseIf jdiskon = "Diskon Kitir" Then
            Range("M" & i).Value = getharga
            Range("L25").ClearContents
        End If

    Next

End Sub
你的问题:“…我的代码只在M13单元中工作,不循环到M22单元。我如何解决这个问题?

您的循环正常,因此这不是您必须解决的问题。 您必须进行调试,以找到循环未执行您想要执行的操作的原因

我在下面发布了修改后的代码,有两个特点:1)它完全符合
范围
s,因此您可以避免意外错误,您可能需要检查;2) 它使用
MsgBox
es,这是一种调试方法

这可能会指出“错误”


(注:我目前没有Excel系统,因此此代码可能需要稍作调整)。

很抱歉,我将“dim diskon as Range”更改为“dim diskon as Variant”,然后我的代码就可以正常工作了。
谢谢您的帮助。

您能描述一下实际问题吗?您还可以清楚地知道哪些代码在工作,哪些代码不在工作吗?下面是解释。我想根据我数据库中的折扣获得价格值。如果我从折扣中得到“pot”值,那么它将只显示从M13到M22范围内的价目表中的实际值,但如果我得到“nett”值,它将计算从价目表-折扣中得到的值,并将其放入单元格M13到M22,而这是一个不起作用的值。“净计算”只在单元格M12中工作,直到单元格M22才循环。谢谢你的环看起来很好。您获得一次jdiskon的值,然后进入循环。如果jdiskon=。。。结束If,检查是否得到不同的值。也许只需将jdiskon的值写入Else中的
范围(“M”&i)
。还要注意区分大小写,你是不是得到了jdiskon的“Nett”或“Nett”或“Nett”?@ChipsLetten:我已经尝试过你的技巧,把最后一个elseif改成else,但仍然不起作用。你能编辑你的帖子来显示修改后的代码吗?我的评论中的其他几点呢?区分大小写?当您将jdiskon写入到工作表中时,您在工作表中得到了什么?如果OP试图将这两个单元格中的值连接起来以用于VLOOKUP函数,那么代码
Range(“D”&i)和Range(“E”&i)
将很好地工作(但完全限定它们会更好)。@Chipsleten:您能解释一下“限定”的含义吗?如果您明确说明该范围所属的工作簿和工作表。”工作手册(“book_name.xlsm”)。工作表(“sheet_name”)。范围(“A1”)@Chipsleten-更新答案。谢谢
Private Sub CommandButton1_Click()

    Dim pelanggan As Range, alamat As Range, diskon As Range, jdiskon As Range, tanggal As Range, jtempo As Range
    Dim rout(1 To 10) As Variant, i As Long
    Dim path As String

    path = "\\Faizal\Data D Faizal\Daftar Harga\Price List"
    Filename = Dir(path & "database.xlsx")

    Dim wb as Workbook, ws1 as Worksheet, ws2 as Worksheet, rng1 as Range
    Set wb = Workbooks("database.xlsx")
    Set ws1 = wb.Worksheets("DB")
    Set ws2 = wb.Worksheets("Gold")
    Set rng1 = ws.Range("A6:N1350")

    Set pelanggan = ws1.Range("E7")
    Set alamat = ws1.Range("E8")
    Set diskon = ws1.Range("L25")
    Set tanggal = ws1.Range("L7")
    Set jdiskon = ws1.Range("P13")
    Set jtempo = ws1.Range("K30")

    Dim rng2 as Range
    Set rng2 = ws1.Range(pelanggan.Value & ws1.Range("J7").Value)

    getalamat = Application.WorksheetFunction.VLookup(rng2, rng1, 14, False)
    getdiskon = Application.WorksheetFunction.VLookup(rng2, rng1, 6, False)
    getjdiskon = Application.WorksheetFunction.VLookup(rng2, rng1, 11, False)
    getjtempo = Application.WorksheetFunction.VLookup(rng2, rng1, 13, False)

    alamat.Value = getalamat
    diskon.Value = getdiskon / 100
    jdiskon.Value = getjdiskon
    tanggal.Value = DateValue(Now)
    jtempo.Value = getjtempo
    'here is the calculation that won't go loop
    For i = 13 To 22
        Dim rng3 as Range
        Set rng3 = ws1.Range(ws1.Range("D" & i).Value & ws1.Range("E" & i).Value)
        getharga = Application.WorksheetFunction.VLookup(rng3, ws2.Range("E4:H80"), 4, False)
        MsgBox "getharga = " & getharga & " for i = " & i
        If jdiskon = "Nett" Then
            ws1.Range("M" & i).Value = getharga - (getharga * diskon)
            ws1.Range("L25").ClearContents
        ElseIf jdiskon = "Pot" Then
            ws1.Range("M" & i).Value = getharga
            ws1.Range("L25").Value = diskon
        ElseIf jdiskon = "Diskon Kitir" Then
            ws1.Range("M" & i).Value = getharga
            ws1.Range("L25").ClearContents
        Else
            MsgBox "jdiskon = " & jdiskon & " for i = " & i
        End If
    Next

End Sub