VBA – 虽然 – IF – 否则有几个陈述

我在VBA非常新,而我的一些知识来自谷歌的研究。 我花了整整一天的时间试图解决这个问题,希望在这里得到一些帮助,因为它可能是简单的

我试图做的是将我的列转换为数字,然后复制其中我的值不是0的列。对不起,我的代码是相当大,丑陋我犯了**内部的问题部分

对不起,我有点急,主要的问题在于

如果valCell.value = 0 Then Else:blabla End if

代码直接跳转到End IF。 不,我意识到,也许我应该把最终IF如何摆在其他人面前? [/编辑]

非常感谢提前!

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 

一个问题是,一旦你最初设置为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的值。 除非您再次设置,否则将保持指向原来的位置。