Excel精英培训网

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

[已解决]求声明子程序 多条件判断

[复制链接]
发表于 2012-10-12 12:06 | 显示全部楼层 |阅读模式
Private Sub CommandButton1_Click()
Dim k As Integer
Set nd = Worksheets("新款ND柜")
Set bzjb = Worksheets("标准件表")
k1_nd = nd.Range("A65536").End(xlUp).Row '表1的行数
k2_nd = nd.Cells(4, 2000).End(1).Column '表1的列数
'表2的行数
K1_bzjb = bzjb.Range("A65536").End(xlUp).Row
'表2的列数
k2_bzjb = bzjb.Cells(2, 2000).End(1).Column
nd.Range("A" & k1_nd + 1) = TextBox1.Value
nd.Range("B" & k1_nd + 1) = TextBox2.Value
nd.Range("C" & k1_nd + 1) = TextBox3.Value
nd.Range("D" & k1_nd + 1) = TextBox4.Value
nd.Range("E" & k1_nd + 1) = TextBox5.Value
If TextBox2.Value = "" And TextBox3.Value = "" Then
   ElseIf TextBox3.Value = "kd" Then
    kk1 = TextBox2.Value
    kk2 = TextBox3.Value
        For n = 2 To K1_bzjb
            a1 = bzjb.Cells(n, 1)
            a2 = bzjb.Cells(n, 2)
            a2 = Str(a2)
            a2 = LTrim(a2)
                If a1 = kk2 And a2 = kk1 Then
                GoTo 跳出
                End If
        Next n
跳出:
        For n1 = 7 To k2_nd Step 2
            If nd.Cells(1, n1) <> "" Then
            b1 = nd.Cells(1, n1)
            End If
            a1 = nd.Cells(4, n1) + b1
             For n2 = 3 To k2_bzjb
            a2 = bzjb.Cells(n, n2)
                If a1 = a2 Then
                a3 = bzjb.Cells(n + 1, n2)
                nd.Cells(k1_nd + 1, n1 + 1) = TextBox5.Value * a3
                nd.Cells(k1_nd + 1, n1 + 1).Interior.ColorIndex = 4
                'ElseIf nd.Cells(k1_nd, n2).Value <> "" Then Interior.ColorIndex = 4
                GoTo tu
                End If
            Next n2
tu:
        Next n1
   Else
End If
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox1.SetFocus
    End Sub
上面的代码只是首要判断是不是“KD”值才运行下面的代码,但我相要有其它条件也可以运行代码的方法,


     求改代码   
最佳答案
2012-10-12 15:17
本帖最后由 hwc2ycy 于 2012-10-12 15:18 编辑
  1. Option Explicit

  2. Dim k As Integer
  3. Dim nd As Worksheet
  4. Dim bzjb As Worksheet
  5. Dim k1_nd As Long
  6. Dim k2_nd As Long
  7. Dim K1_bzjb As Long
  8. Dim k2_bzjb As Long


  9. Private Sub CommandButton1_Click()
  10.     'Dim k As Integer
  11.     Set nd = Worksheets("新款ND柜")
  12.     Set bzjb = Worksheets("标准件表")
  13.     k1_nd = nd.Range("A65536").End(xlUp).Row '表1的行数
  14.     k2_nd = nd.Cells(4, 2000).End(1).Column '表1的列数
  15.     '表2的行数
  16.     K1_bzjb = bzjb.Range("A65536").End(xlUp).Row
  17.     '表2的列数
  18.     k2_bzjb = bzjb.Cells(2, 2000).End(1).Column
  19.     nd.Range("A" & k1_nd + 1) = TextBox1.Value
  20.     nd.Range("B" & k1_nd + 1) = TextBox2.Value
  21.     nd.Range("C" & k1_nd + 1) = textbox3.Value
  22.     nd.Range("D" & k1_nd + 1) = TextBox4.Value
  23.     nd.Range("E" & k1_nd + 1) = TextBox5.Value
  24.     If TextBox2.Value = "" And textbox3.Value = "" Then Exit Sub
  25.    
  26.     If textbox3.Value = "kd" Then
  27.         子过程
  28.     Else
  29.         If textbox3.Value = "kb" Then 子过程
  30.     End If
  31.    
  32.     TextBox1.Value = ""
  33.     TextBox2.Value = ""
  34.     textbox3.Value = ""
  35.     TextBox4.Value = ""
  36.     TextBox5.Value = ""
  37.     TextBox1.SetFocus
  38. End Sub

  39. Sub 子过程()
  40.     kk1 = TextBox2.Value
  41.     kk2 = textbox3.Value
  42.     For n = 2 To K1_bzjb
  43.         a1 = bzjb.Cells(n, 1)
  44.         a2 = bzjb.Cells(n, 2)
  45.         a2 = Str(a2)
  46.         a2 = LTrim(a2)
  47.         If a1 = kk2 And a2 = kk1 Then
  48.             GoTo 跳出
  49.         End If
  50.     Next n
  51. 跳出:
  52.     For n1 = 7 To k2_nd Step 2
  53.         If nd.Cells(1, n1) <> "" Then
  54.             b1 = nd.Cells(1, n1)
  55.         End If
  56.         a1 = nd.Cells(4, n1) + b1
  57.         For n2 = 3 To k2_bzjb
  58.             a2 = bzjb.Cells(n, n2)
  59.             If a1 = a2 Then
  60.                 a3 = bzjb.Cells(n + 1, n2)
  61.                 nd.Cells(k1_nd + 1, n1 + 1) = TextBox5.Value * a3
  62.                 nd.Cells(k1_nd + 1, n1 + 1).Interior.ColorIndex = 4
  63.                 'ElseIf nd.Cells(k1_nd, n2).Value <> "" Then Interior.ColorIndex = 4
  64.                 GoTo tu
  65.             End If
  66.         Next n2
  67. tu:
  68.     Next n1
  69. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-10-12 15:06 | 显示全部楼层
你把判断后要执行的语句单独拿出来写个过程,主程序里就不停的用IF来判断是否调用过程。
回复

使用道具 举报

发表于 2012-10-12 15:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hwc2ycy 于 2012-10-12 15:18 编辑
  1. Option Explicit

  2. Dim k As Integer
  3. Dim nd As Worksheet
  4. Dim bzjb As Worksheet
  5. Dim k1_nd As Long
  6. Dim k2_nd As Long
  7. Dim K1_bzjb As Long
  8. Dim k2_bzjb As Long


  9. Private Sub CommandButton1_Click()
  10.     'Dim k As Integer
  11.     Set nd = Worksheets("新款ND柜")
  12.     Set bzjb = Worksheets("标准件表")
  13.     k1_nd = nd.Range("A65536").End(xlUp).Row '表1的行数
  14.     k2_nd = nd.Cells(4, 2000).End(1).Column '表1的列数
  15.     '表2的行数
  16.     K1_bzjb = bzjb.Range("A65536").End(xlUp).Row
  17.     '表2的列数
  18.     k2_bzjb = bzjb.Cells(2, 2000).End(1).Column
  19.     nd.Range("A" & k1_nd + 1) = TextBox1.Value
  20.     nd.Range("B" & k1_nd + 1) = TextBox2.Value
  21.     nd.Range("C" & k1_nd + 1) = textbox3.Value
  22.     nd.Range("D" & k1_nd + 1) = TextBox4.Value
  23.     nd.Range("E" & k1_nd + 1) = TextBox5.Value
  24.     If TextBox2.Value = "" And textbox3.Value = "" Then Exit Sub
  25.    
  26.     If textbox3.Value = "kd" Then
  27.         子过程
  28.     Else
  29.         If textbox3.Value = "kb" Then 子过程
  30.     End If
  31.    
  32.     TextBox1.Value = ""
  33.     TextBox2.Value = ""
  34.     textbox3.Value = ""
  35.     TextBox4.Value = ""
  36.     TextBox5.Value = ""
  37.     TextBox1.SetFocus
  38. End Sub

  39. Sub 子过程()
  40.     kk1 = TextBox2.Value
  41.     kk2 = textbox3.Value
  42.     For n = 2 To K1_bzjb
  43.         a1 = bzjb.Cells(n, 1)
  44.         a2 = bzjb.Cells(n, 2)
  45.         a2 = Str(a2)
  46.         a2 = LTrim(a2)
  47.         If a1 = kk2 And a2 = kk1 Then
  48.             GoTo 跳出
  49.         End If
  50.     Next n
  51. 跳出:
  52.     For n1 = 7 To k2_nd Step 2
  53.         If nd.Cells(1, n1) <> "" Then
  54.             b1 = nd.Cells(1, n1)
  55.         End If
  56.         a1 = nd.Cells(4, n1) + b1
  57.         For n2 = 3 To k2_bzjb
  58.             a2 = bzjb.Cells(n, n2)
  59.             If a1 = a2 Then
  60.                 a3 = bzjb.Cells(n + 1, n2)
  61.                 nd.Cells(k1_nd + 1, n1 + 1) = TextBox5.Value * a3
  62.                 nd.Cells(k1_nd + 1, n1 + 1).Interior.ColorIndex = 4
  63.                 'ElseIf nd.Cells(k1_nd, n2).Value <> "" Then Interior.ColorIndex = 4
  64.                 GoTo tu
  65.             End If
  66.         Next n2
  67. tu:
  68.     Next n1
  69. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-12 15:20 | 显示全部楼层
变量最好是强制声明。
如果不想写代码,又不怕逻辑乱了,还可以用GOTO来实现。
回复

使用道具 举报

 楼主| 发表于 2012-10-13 10:25 | 显示全部楼层
多谢老师的指点,非常感谢!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 12:13 , Processed in 1.190096 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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