【问题标题】:VBA loop macro displays no errors, but show no results after startVBA循环宏不显示错误,但启动后不显示结果
【发布时间】:2018-09-13 11:44:03
【问题描述】:

我正在尝试提供输入数据并在按下按钮后自动移动到表格的用户表单。

我的用户表单由两个选项按钮(帮助区分输入数据的放置位置)和两个文本框组成:一个用于输入条件,另一个用于输入日期,必须将它们放入符合条件的单元格中。到目前为止,我想出了这个代码:

Private Sub UzdarytiCB_Click() 

Dim i As Long
   'setting conditions for first option button selection     
If OptionButton1 = True And Condition_TextBox <> "" _
   'with other subs I have made default text in texbox which is shown until clicked
   'this line should stop macro from starting if no text is entered and default text left
   And Condition_TB <> "Enter Application ID" Then

      ' I want macro to loop throught all the table until it finds a match
      For i = 3 To Range("Table1").Rows.Count

 'Conditions to finding a match. Cell in column D should say "Remarks" and entered value should match cell in column A
           If Condition_TB = Worksheets("sheet1").Cells(i, "A").Value _
           And Worksheets("sheet1").Cells(i, "D").Value = "Remarks" Then
'If conditions are met I want macro to change column D cell value to "done" and write date from second texbox to cell in column N
               Worksheets("sheet1").Cells(i, "N").Value = Condition_TB
               Worksheets("sheet1").Cells(i, "D").Value = "Done"
               'Since there will be no more mach I want to stop the loop
               Exit For
               End If
            Next i

    ' Second option button similar to first, but it should not stop after first match
    ElseIf  OptionButton2 = True And Condition_TextBox <> "" _
            And Condition_TB <> "Enter Application ID" _
            And Condition_TB <> "Enter item number" Then

               For i = 3 To Range("Table1").Rows.Count
                   If Condition_TB = Worksheets("sheet1").Cells(i, "P").Value _
                   And Worksheets("sheet1").Cells(i, "D").Value = "Make a call" Then
                       Worksheets("sheet1").Cells(i, "L").Value = DataTB
                       Worksheets("sheet1").Cells(i, "D").Value = "Call made"
                       End If
                    Next i
    End If                   
  End Sub

到目前为止,整个代码没有显示任何错误,但随后单击并输入了数据,没有任何反应。 由于我是初学者,整个代码可能本质上是错误的,请帮助我找出错误或进入正确的轨道。

【问题讨论】:

  • 第一个 If 语句中的 Then 在哪里?
  • 对不起,我不小心把它弄丢了,然后编辑了代码以在帖子中看起来清晰,在原始文件中 然后 已经到位。我编辑了我的帖子。
  • 那么 Condition_TB 可以是“输入应用程序 ID”或“输入项目编号”?
  • 是的,是在 Condition_TB 中显示的默认文本,直到单击它并输入不同的文本。如果是“输入应用程序 ID”或“输入项目编号”取决于选项按钮选择。它们都是由另一个宏生成的,但我认为它不会干扰这个。

标签: vba excel error-handling


【解决方案1】:

我认为你非常接近这个!

我注意到可能导致问题的前几件事是您的 IF 条件。

尝试这些更改,看看您是否获得了想要的结果:

变化:

If OptionButton1 = True And Condition_TextBox <> "" Then

If OptionButton1 = True And Condition_TextBox.value <> "" Then

用户为用户表单对象输入值的任何地方,并且您正在检查用户定义输入的值,在对象后添加“.value”以检查用户输入。

请记住,您的选项按钮没有问题。这些选项按钮在检查 True 或 False 时不需要“.value”属性。

未来的调试提示:

作为帮助您在将来调试代码的附加说明,您可以在 if 语句之后添加触发器,以通知您是否满足条件。如果触发器没有显示,那么您就知道问题出在哪里了。

例如:

您可以在条件之后立即添加以下内容:

MsgBox("Condition 1 was met!")

Debug.Print("Condition 1 was met!")

让我们看看你会得到什么。如果您有更多问题,我很乐意为您提供帮助!

【讨论】:

  • 我已将您的建议用于 MsgBox。我能够查明问题出在For i = 1 To Range("Table1").Rows.Count If Condition_TB = Worksheets("sheet1").Cells(i, "A").Value _ And Worksheets("sheet1").Cells(i, "D").Value = "Remarks" Then 这很奇怪,因为For i = 3 To Range("Table1").Rows.Count If Condition_TB = Worksheets("sheet1").Cells(i, "P").Value _ And Worksheets("sheet1").Cells(i, "D").Value = "Make a call" Then 现在似乎可以工作(我将它与另一个If 分开)
【解决方案2】:

在尝试了 Dylan L 调试方法后,我发现问题出在循环的 IF 上。原来If Condition_TB = Worksheets("sheet1").Cells(i, "P").Value 应该是If Condition_TB.Text = Worksheets("sheet1").Cells(i, "P").Value

我还遇到了由于某种原因循环忽略了前 4 个单元格的问题,即使它们满足条件。为了解决这个问题,我重新排列了我的代码并将选项 IF 分隔为两个不同的例程,For i = 3 To Range("Table1").Rows.Count 也更改为 For i = 1 To Range("Table1").Rows.Count

我不知道哪个部分有帮助,但最终结果似乎有效。我正在发布最终代码,所以也许有人可以使用它。

另外,如果有人可以提供一些改进或有一些批评,我很乐意接受,因为我是初学者并且正在学习。

Private Sub UzdarytiCB_Click()

Dim i As Long
i = 1


  If OptionButton1 = True And Number_TextBox <> "" _
     And Number_TextBox <> "Enter application ID" _
     And Number_TextBox <> "Enter item ID" Then

         For i = 1 To Range("Table1").Rows.Count
             If Number_TextBox.Text = Worksheets("sheet1").Cells(i, "P").Value _
                And Worksheets("sheet1").Cells(i, "D").Value = "Make a call" Then
                    Worksheets("sheet1").Cells(i, "L").Value = DataTB
                    Worksheets("sheet1").Cells(i, "D").Value = "Call made"
                End If
              Next i
    End If

If OptionButton2 = True And Number_TextBox <> "" _
    And Number_TextBox <> "Enter application ID" _
    And Number_TextBox <> "Enter item ID" Then

     For i = 1 To Range("Table1").Rows.Count
            If Number_TextBox.Text = Worksheets("sheet1").Cells(i, "A").Value _
                And Worksheets("sheet1").Cells(i, "D").Value = "Remarks" Then
               Worksheets("sheet1").Cells(i, "N").Value = DataTB
               Worksheets("sheet1").Cells(i, "D").Value = "Done"
               End If
            Next i
    End If

End Sub

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 2020-06-09
    • 2017-01-04
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多