VBA - 而 - IF - 还有几个陈述

时间:2014-08-21 15:54:19

标签: excel vba excel-vba

我是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

1 个答案:

答案 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的值。除非你再次设置它,否则它将保持指向原始状态。