使用VBA如果then语句使用TextBox.Values

时间:2017-06-12 08:56:20

标签: excel vba excel-vba

我目前面临以下问题:

源数据目前看起来如下:

Value#1        Value#2
10             AA
11             AA
12             AB
13             AD
1231           AA
125            AB
4312           AA
12314          AA

现在,用户拥有多个用户表单文本框,可以在其中定义相应值的位置:

  • Textbox1 =定义值的起始行
  • Textbox2 =值#1的列
  • Textbox3 =值#2的列
  • Textbox4 =值#2中的标准

现在我想实现以下目标;用户应该指定他的值#1的位置(在TextBox2中),然后他应该定义可以找到标准的列(TextBox3中的值#2),之后他应该定义应该过滤的标准。

因此,如果他选择在Textbox4中键入“AB”,则必须在工作表的第一个可用列中显示以下内容:

Value#1        Value#2
12             AB
125            AB

我当前的代码看起来像这样,但我不断改变它,没有什么真正起作用(语法错误)。我确实知道语法的开头是好的(?),但是我不知道如何用vba表达我希望他们将列中的值复制到另一个中,如果条件匹配的话。这里和其他地方有很多例子,但我找不到范围或值未预定义的任何内容。

Dim c as Range

    If OptionButton1.Value = True Then 'also this only happens if the user decides that an Optionbutton is true         
       For Each c In Sheets ("Table") Range (TextBox3.Value & TextBox1.Value + 1 & ":" & TextBox3.Value & lastrow)
             If cell.Value = TextBox4.Value Then
                    Range (TextBox2.Value & TextBox1.Value + 1 & ":" & TextBox2.Value & lastrow) c.copy c.Offset (, 1) 'syntax-error
             End If
        Next

    End If

我对VBA和整个编程都很陌生,无法找到解决方案。

通过一些研究我很确定解决这个问题的语法有点像“For each”x“”等。但是我从来没有找到过使用TextBox定义范围和值的东西。 / p>

1 个答案:

答案 0 :(得分:0)

关于您的代码的一些注释:

首先,您在C行中使用For Each c In Sheets ("Table")...进行循环,但是您检查的是以下行If cell.Value = TextBox4.Value,而不是If C.Value = TextBox4.Value

其次,如果您希望复制该单元格,以防它等于TextBox4.Value到下一列,请使用C.Copy C.Offset(, 1)

尝试以下代码:

Dim Rng As Range
Dim C As Range

If OptionButton1.Value = True Then 'also this only happens if the user decides that an Optionbutton is true

    ' set the range fisrt , See if you are getting the Error on this line -->
    Set Rng = Sheets("Table").Range(TextBox3.Value & TextBox1.Value + 1 & ":" & TextBox3.Value & lastrow)
    For Each C In Rng
        ' for DEBUG ONLY
        Debug.Print C.Value & " | TextBox4 value: " & TextBox4.Value
        If C.Value = TextBox4.Value Then
            MsgBox "There is a match" ' <-- for DEBUG ONLY
            C.Copy C.Offset(, 1)  ' copy the value from the cell into the next column to the right
        End If
    Next C
End If