Excel VBA循环抛出最后一个循环答案作为每个循环的答案

时间:2012-12-10 12:50:18

标签: excel-vba for-loop vba excel

我只是不能给我正确的答案!我试图将温度值从1 excel表 - “设计” - 导入到另一个excel表 - “Design2”。如果组合框的文本是“C” - 温度值应该是原样。如果组合框处于“K”状态,则应将273.15添加到温度值以将其转换为开尔文。

这部分工作正常。

然而,该程序为“Design2”表上的每个温度提供相同的值 - 即使“设计”表上的温度不同。

有人可以帮忙吗???

这是我的代码:

    Private Sub OK_Click()
    'Temperature
    Dim Temperaturei As Double
    Dim j As Integer
    Dim k As Integer

    For i = 201 To 218
        For j = 4 To 36 Step 2
            For k = 2 To 19
                Temperaturei = Sheets("Design").Cells(36, j).Value
                        Sheets("Design2").Cells(k, 2).Value = Temperaturei
                    Select Case Sheets("Diagram").TemperatureUnit.Text
                        Case "°C"
                            Temperaturei = Temperaturei
                        Case "K"
                            Temperaturei = Temperaturei + 273.15
                    End Select
            Next k
        Next j
    Next i

    End Sub

2 个答案:

答案 0 :(得分:0)

如果你移动线怎么办:

Sheets("Design2").Cells(k, 2).Value = Temperaturei

之前

Next k

这样,您可以在代码更改后将Temperaturei结果写入Design2表。它现在写的方式,从Design表单中提取后,它不会在任何地方写入更改后的值。

所以,完整的,你的代码看起来像这样:

Private Sub OK_Click()
'Temperature
Dim Temperaturei As Double
Dim j As Integer
Dim k As Integer

For i = 201 To 218
    For j = 4 To 36 Step 2
        For k = 2 To 19

            'pick up value
            Temperaturei = Sheets("Design").Cells(36, j).Value

                'alter it
                Select Case Sheets("Diagram").TemperatureUnit.Text
                    Case "°C"
                        Temperaturei = Temperaturei
                    Case "K"
                        Temperaturei = Temperaturei + 273.15
                End Select

             'write back to sheet
             Sheets("Design2").Cells(k, 2).Value = Temperaturei

        Next k
    Next j
Next i

End Sub

答案 1 :(得分:0)

你是否意味着单独遍历Design and Design2?因为您现在正在设置循环的方式,所以您只需使用Design中的一个值来迭代Design2。当J保持在4时,K将从2变为19然后当J移动到5时,K将再次从2变为19。我不确定你的程序的设计,但是你正在尝试做什么?

如果没有,您应该考虑将第二个和第三个循环组合成一个循环,以便两个工作表同时迭代。我可以看到你需要在“设计”上一步一步,但是你可以通过简单地说((k * 2)+ 2)来达到同样的效果。

示例:

Dim j as Integer
For k = 2 to 19
    j = (k*2) 'If k = 2, j = 4, if k = 3, j = 6, etc, etc.
    [Do stuff]

End For

我有点在黑暗中射击,但我认为这可能是你的问题。事实上,在再次阅读你的问题之后,我很确定这是问题......