【问题标题】:For Next Loop with Function ErrorFor Next Loop 函数错误
【发布时间】:2016-11-23 15:43:52
【问题描述】:

我正在尝试创建一个循环来更新一些已经在用户窗体上创建的“文本框”。 问题是当我链接线路时

              For y = 2 * (3 + k) To 2 * (3 + k)

    For k = 0 To 7

我收到不匹配错误。但如果我定义 y = 6,一切都会好起来的。

你能帮帮我吗?

请看下面的完整代码:

    Sub Update_TextBox_Preco()

    Dim k As Double
    Dim myarray2 As Variant
    Dim y As Double
    Dim Textbox As String
    Dim Textbox_1 As String
    Dim line As Variant

    Array with contained TextBox names
        myarray2 = Array("TextBox_Moeda_Atual", "TextBox_Medida_Atual", "TextBox_Acond_Atual", "TextBox_Lote_Atual", _
                    "TextBox_Incoterm_Atual", "TextBox_p_liq_atual", "TextBox_encargo_atual", "TextBox_Frete_Atual")

    For k = 0 To 7
    Textbox = myarray2(k)
              For y = 2 * (3 + k) To 2 * (3 + k)
                 UserForm1.Controls(Textbox).Value = Worksheets("PANEL").Cells(y, 45).Value
              Next y
    Next k

    End Sub

【问题讨论】:

  • 我刚刚试了,没有报错,请问是哪里出错了?您的第二个循环只产生 6,8,10,12,14,16,18 和 20,那么为什么不使用变量 y,从 6 开始,每次递增 2?
  • @Nathan_Sav 给出错误的循环/序列是链接到 For k = 0 To 7For y = 2 * (3 + k) To 2 * (3 + k)。但是如果我设置For y = 6 to 6,例如,它会正常运行。
  • 您可能应该将 Dim ky 作为 Long 而不是 Double。可能会发生一些舍入错误?
  • 不管错误是否源于此,For 循环计数器永远不应该是浮点类型,@bobajob 有一点。将它们设为Long 整数,然后将那个从盘子里拿出来。
  • FWIW Textbox As String 正在遮蔽 TextBox 类型,这可能有问题,也可能没有问题。避免使用引用类型库中已经存在的标识符来命名局部变量。

标签: vba excel for-loop


【解决方案1】:

只需摆脱y 循环。它只触发一次,所以每次通过k 循环时只需设置y

Sub Update_TextBox_Preco()

Dim k As Long
Dim myarray2 As Variant
Dim y As Long
Dim TextBoxUp As String
Dim Textbox_1 As String
Dim line As Variant

'Array with contained TextBox names
    myarray2 = Array("TextBox_Moeda_Atual", "TextBox_Medida_Atual", "TextBox_Acond_Atual", "TextBox_Lote_Atual", _
                "TextBox_Incoterm_Atual", "TextBox_p_liq_atual", "TextBox_encargo_atual", "TextBox_Frete_Atual")

For k = 0 To 7
    TextBoxUp = myarray2(k)
    y = 2 * (3 + k)
    UserForm1.Controls(TextBoxUp).Value = Worksheets("PANEL").Cells(y, 45).Value
Next k

End Sub

【讨论】:

  • 错误仍然存​​在,但如果我将y = 2 * (3 + k) 中的k 省略为y = 2 * 3,则一切正常。
  • @Petter_Mendes 我完全复制并粘贴了这段代码,直到UserForm1.Controls 行才出现错误(因为我显然没有构建您的文本框)。我没有关于类型不匹配的错误。
  • 根据@Mat'sMug 建议更新
  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
相关资源
最近更新 更多