我是VBA的新手,我的小知识来自谷歌研究。 我整天都在努力解决这个问题,希望能在这里提供一些帮助,因为它可能很简单
我尝试做的是将我的列转换为数字,然后复制我的值不为0的列。 对不起,我的代码非常大而且难看我在**
中制作了有问题的部分[编辑]对不起我有点匆忙,主要问题是
之后如果valCell.value = 0那么 其他:blabla 如果
结束代码直接跳转到End IF。 不,我意识到也许我应该把End IF放在Else之前? [/编辑]
提前多多谢谢!
Sub filter()
Application.ScreenUpdating = False
Windows("file1.csv").Activate
Range("B:B,C:C,E:E,F:F,G:G,I:I,J:J,K:K,L:L").Select
Range("L1").Activate
Selection.Copy
Windows("file2.xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
Range("J2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-6],'Buffer Page'!C[-9],1,FALSE),""0"")"
Selection.AutoFill Destination:=Range("J2:J500")
Range("J2:J500").Select
Range("K2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-4],'Buffer Page'!C[-10],1,FALSE),""0"")"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:K500")
Range("K2:K110").Select
Range("J2:K500").Select
' Convertion to Numbers
For Each xCell In Selection
xCell.Value = CDec(xCell.Value)
Next xCell
Dim NumeroLigne As Integer
Sheets("2ndBuffer").Select
FinLigne = ActiveSheet.UsedRange.Rows.Count + 1 ' Variable 1
NumeroLigne = 2 'Variable 2
Set valCell = Range("J" & NumeroLigne)
Sheets("2ndBuffer").Select
While NumeroLigne < FinLigne
Sheets("2ndBuffer").Range("J" & NumeroLigne).Select
**If valCell.Value = 0 Then
Else: Range("A" & NumeroLigne, "I" & NumeroLigne).Select
Range("D" & NumeroLigne) Then
Application.CutCopyMode = False
Selection.Copy
Sheets("MNAs").Select
Range("A1").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Sheets("2ndBuffer").Select**
End If
NumeroLigne = NumeroLigne + 1
Wend
End Sub
答案 0 :(得分:2)
一个问题是,一旦你最初将它设置为J2,valCell就不会改变。这是您的代码,大大简化后只显示这一点。如果运行代码,您将看到valCell 始终指向J2。
选项明确
Sub Simple()
Dim valCell As Range
Dim xCell As Range
Dim FinLigne As Long
Dim NmeroLigne As Long
Range("J2:K10").Select
' Convertion to Numbers
For Each xCell In Selection
xCell.Value = CDec(xCell.Value)
Next xCell
Dim NumeroLigne As Integer
FinLigne = ActiveSheet.UsedRange.Rows.Count + 1 ' Variable 1
NumeroLigne = 2 'Variable 2
Set valCell = Range("J" & NumeroLigne)
While NumeroLigne < FinLigne
If valCell.Value = 0 Then
Debug.Print valCell.Address
End If
NumeroLigne = NumeroLigne + 1
Wend
End Sub
如果你想改变valCell,你需要将它设置在While ... Wend循环中。它只需要设置NumeroLigne的值。除非你再次设置它,否则它将保持指向原始状态。