Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3177|回复: 8

[已解决]VBA IF 条件判断问题

[复制链接]
发表于 2013-6-2 16:56 | 显示全部楼层 |阅读模式
     If Range("B2") > 6 Then
     GoTo output:

    ElseIf Range("K3") > 5 And Range("L3") > 3 And Range("M3") > 3 And Range("N3") > 4 And Range("O3") > 4 And Range("P3") > 4 And Range("Q3") > 4 And Range("R3") > 4 _
    And Range("S3") > 4 And Range("T3") > 4 And Range("U3") > 4 And Range("V3") > 4 And Range("W3") > 4 And Range("X3") > 4 And Range("Y3") > 4 And Range("Z3") > 4 _
    And Range("AA") > 4 Then

output:

        Set abc = CreateObject("scripting.filesystemobject")
        Set ntxt = abc.opentextfile("1.txt", 8, True)
        ntxt.writeline “正确”
        ntxt.Close
        Set abc = Nothing
        Else
     End If


到上面的ElseIf ..... Then 报全局错误,请问怎么处理。

最佳答案
2013-6-2 17:15
  1. Sub tets()

  2.     Dim blCon1 As Boolean
  3.     Dim blCon2 As Boolean
  4.    
  5.     blCon1 = Range("B2") > 6
  6.     blCon2 = Range("K3") > 5 And Range("L3") > 3 And Range("M3") > 3 And Range("N3") > 4 And Range("O3") > 4 And Range("P3") > 4 And Range("Q3") > 4 And Range("R3") > 4 _
  7.              And Range("S3") > 4 And Range("T3") > 4 And Range("U3") > 4 And Range("V3") > 4 And Range("W3") > 4 And Range("X3") > 4 And Range("Y3") > 4 And Range("Z3") > 4 _
  8.              And Range("AA3") > 4
  9.    
  10.     Select Case True
  11.         Case blCon1
  12.         Case blCon2
  13.         Case Else
  14.             Exit Sub
  15.     End Select
  16.    
  17.     Set abc = CreateObject("scripting.filesystemobject")
  18.     Set ntxt = abc.pentextfile("1.txt", 8, True)
  19.     ntxt.writeline "正确"""
  20.     ntxt.Close
  21.     Set abc = Nothing
  22. End Sub
复制代码
发表于 2013-6-2 17:01 | 显示全部楼层
回复

使用道具 举报

发表于 2013-6-2 17:09 | 显示全部楼层
  1. Range("AA")
复制代码
这里写错了,没加行号。
回复

使用道具 举报

发表于 2013-6-2 17:11 | 显示全部楼层
代码的逻辑判断太乱了。
一般情况下,不要用GOTO来改变代码方向。
  1. Sub tets()
  2.     If Range("B2") > 6 Then
  3.         GoTo output:

  4.     ElseIf Range("K3") > 5 And Range("L3") > 3 And Range("M3") > 3 And Range("N3") > 4 And Range("O3") > 4 And Range("P3") > 4 And Range("Q3") > 4 And Range("R3") > 4 _
  5.            And Range("S3") > 4 And Range("T3") > 4 And Range("U3") > 4 And Range("V3") > 4 And Range("W3") > 4 And Range("X3") > 4 And Range("Y3") > 4 And Range("Z3") > 4 _
  6.            And Range("AA3") > 4 Then
  7. output:
  8.         Set abc = CreateObject("scripting.filesystemobject")
  9.         Set ntxt = abc.pentextfile("1.txt", 8, True)
  10.         ntxt.writeline "正确"""
  11.         ntxt.Close
  12.         Set abc = Nothing
  13.     Else
  14.     End If
  15. End Sub
复制代码
回复

使用道具 举报

发表于 2013-6-2 17:15 | 显示全部楼层    本楼为最佳答案   
  1. Sub tets()

  2.     Dim blCon1 As Boolean
  3.     Dim blCon2 As Boolean
  4.    
  5.     blCon1 = Range("B2") > 6
  6.     blCon2 = Range("K3") > 5 And Range("L3") > 3 And Range("M3") > 3 And Range("N3") > 4 And Range("O3") > 4 And Range("P3") > 4 And Range("Q3") > 4 And Range("R3") > 4 _
  7.              And Range("S3") > 4 And Range("T3") > 4 And Range("U3") > 4 And Range("V3") > 4 And Range("W3") > 4 And Range("X3") > 4 And Range("Y3") > 4 And Range("Z3") > 4 _
  8.              And Range("AA3") > 4
  9.    
  10.     Select Case True
  11.         Case blCon1
  12.         Case blCon2
  13.         Case Else
  14.             Exit Sub
  15.     End Select
  16.    
  17.     Set abc = CreateObject("scripting.filesystemobject")
  18.     Set ntxt = abc.pentextfile("1.txt", 8, True)
  19.     ntxt.writeline "正确"""
  20.     ntxt.Close
  21.     Set abc = Nothing
  22. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-2 17:28 | 显示全部楼层
hwc2ycy 发表于 2013-6-2 17:09
这里写错了,没加行号。

恩,谢谢,主要是很多条件同时满主的IF 我不晓得怎么写,还是新手,谢谢你的回答。
回复

使用道具 举报

发表于 2013-6-2 20:55 | 显示全部楼层
对于多单元格需要单独判断,并且判断条件是一样的,可以写一个公用过程来进行处理


下面自定义过程中 rng 为条件单元格,num 为判断的值
只要条件相同,这个区域可以是连续的,也可以是不连续的
如不连续的区域这样写:
MsgBox Tf(Range("A3:F3,e5,H6,N3:Y3"), 3)
判断 Range("A3:F3,e5,H6,N3:Y3") 这些单元格的值是否都大于3,只要有一个不大于3 则会返回 false

  1. Private Function Tf(ByVal Rng As Range, ByVal Num As Double) As Boolean
  2. Dim C As Range, Js As Integer
  3.     For Each C In Rng
  4.         If C.Value > Num Then
  5.             Js = Js + 1
  6.         Else
  7.             Exit For
  8.         End If
  9.     Next
  10.     Tf = (Js = Rng.Count)
  11. End Function
复制代码
你的代码修改后:

  1.     If Range("B2") > 6 Then
  2.      GoTo output:
  3.     ElseIf Range("K3") > 5 And Tf(Range("L3:M3"), 3) And Tf(Range("N3:AA3"), 4) Then
  4. output:
  5.         Set Abc = CreateObject("scripting.filesystemobject")
  6.         Set Ntxt = Abc.opentextfile("1.txt", 8, True)
  7.         Ntxt.writeline "正确"
  8.         Ntxt.Close
  9.         Set Abc = Nothing
  10.     Else
  11.     End If
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-3 16:25 | 显示全部楼层
无聊的疯子 发表于 2013-6-2 20:55
对于多单元格需要单独判断,并且判断条件是一样的,可以写一个公用过程来进行处理

谢谢!问题解决了。看到你的回复,学到了另一种方法。
回复

使用道具 举报

发表于 2013-6-3 16:30 | 显示全部楼层
无聊的疯子 发表于 2013-6-2 20:55
对于多单元格需要单独判断,并且判断条件是一样的,可以写一个公用过程来进行处理

欢迎酱油哥到此一油啊。
总是能查漏补缺。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 04:04 , Processed in 0.369632 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表