Excel精英培训网

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

求助(二刷补悬赏

[复制链接]
发表于 2019-5-8 09:34 | 显示全部楼层 |阅读模式
2学分
求救,递归画三角想要简化程序,结果一直显示下标错误
rar和zip文件里内容是一样的,谢谢各位啦
原来画三角的代码如下,其实就是简单的变量带不进数组,但是我太菜了不知道怎么解决,求各位大神帮忙鸭(或者大家可以帮忙简化一下程序也可以呀)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2019-5-8 09:35 | 显示全部楼层
Public triArray(1 To 4, 1 To 2) As Single
Public arrColor(7) As Integer


Sub init()
       For Each sh In Worksheets(1).Shapes
       If sh.Type <> 8 And sh.Type <> 12 Then            '删除除按钮外的东西
      
       sh.Delete
       End If
Next sh



   triArray(1, 1) = 22
   triArray(1, 2) = 300

   
   triArray(2, 1) = 58
   triArray(2, 2) = 208
   
   triArray(3, 1) = 300
   triArray(3, 2) = 210
   
   triArray(4, 1) = 22
   triArray(4, 2) = 300


End Sub


Public Sub jeffery(depth As Integer, triArray() As Single)

        Dim a_triArray(1 To 4, 1 To 2) As Single
        Dim b_triArray(1 To 4, 1 To 2) As Single
        Dim c_triArray(1 To 4, 1 To 2) As Single
        
        a_triArray(1, 1) = triArray(1, 1)
        a_triArray(1, 2) = triArray(1, 2)

        a_triArray(2, 1) = (triArray(1, 1) + triArray(2, 1)) / 2
        a_triArray(2, 2) = (triArray(1, 2) + triArray(2, 2)) / 2
        
        a_triArray(3, 1) = (triArray(1, 1) + triArray(3, 1)) / 2
        a_triArray(3, 2) = (triArray(1, 2) + triArray(3, 2)) / 2
        
        a_triArray(4, 1) = triArray(1, 1)
        a_triArray(4, 2) = triArray(1, 2)
        
        
        
        b_triArray(1, 1) = triArray(2, 1)
        b_triArray(1, 2) = triArray(2, 2)

        b_triArray(2, 1) = (triArray(1, 1) + triArray(2, 1)) / 2
        b_triArray(2, 2) = (triArray(1, 2) + triArray(2, 2)) / 2
        
        b_triArray(3, 1) = (triArray(2, 1) + triArray(3, 1)) / 2
        b_triArray(3, 2) = (triArray(2, 2) + triArray(3, 2)) / 2
        
        b_triArray(4, 1) = triArray(2, 1)
        b_triArray(4, 2) = triArray(2, 2)
        
        
        
        c_triArray(1, 1) = triArray(3, 1)
        c_triArray(1, 2) = triArray(3, 2)

        c_triArray(2, 1) = (triArray(3, 1) + triArray(2, 1)) / 2
        c_triArray(2, 2) = (triArray(3, 2) + triArray(2, 2)) / 2
        
        c_triArray(3, 1) = (triArray(1, 1) + triArray(3, 1)) / 2
        c_triArray(3, 2) = (triArray(1, 2) + triArray(3, 2)) / 2
        
        c_triArray(4, 1) = triArray(3, 1)
        c_triArray(4, 2) = triArray(3, 2)
        
        If depth > 0 Then
        
        
            dely
        Call triDrawing(depth, triArray)
        Call jeffery(depth - 1, c_triArray)
            dely
        Call jeffery(depth - 1, b_triArray)
            dely
        Call jeffery(depth - 1, a_triArray)
        
        dely
        End If
        
End Sub


Public Sub triDrawing(n As Integer, points() As Single)
        Dim arrColor As Variant
        arrColor = Array(12, 51, 43, 11, 7, 44, 33)
        
        
        Dim spe As Shape
        Set spe = Worksheets(1).Shapes.AddPolyline(points)
        spe.Name = "triangle"
        
        
        spe.Select
        With Selection.ShapeRange
        .Line.Visible = msoTrue
        .Line.ForeColor.SchemeColor = arrColor(n)
        
        .Fill.Visible = msoTrue
        .Fill.ForeColor.SchemeColor = arrColor(n)
        
        End With
        
End Sub

Public Sub test()
       Call init
      
       Call jeffery(5, triArray())
       dely
      
End Sub


Public Sub dely()

     DoEvents
     k = 20
     For i = 1 To k * 99
     Next
     
End Sub
回复

使用道具 举报

 楼主| 发表于 2019-5-8 09:36 | 显示全部楼层
这是附件

1810307205 于明智 递归.rar

20.03 KB, 下载次数: 0

1810307205 于明智 递归.zip

20.06 KB, 下载次数: 0

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 10:09 , Processed in 0.297097 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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