我目前面临以下问题:
源数据目前看起来如下:
Value#1 Value#2
10 AA
11 AA
12 AB
13 AD
1231 AA
125 AB
4312 AA
12314 AA
现在,用户拥有多个用户表单文本框,可以在其中定义相应值的位置:
现在我想实现以下目标;用户应该指定他的值#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>
答案 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