Excel精英培训网

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

[分享] 看看你的照片符合黄金比例吗?

[复制链接]
发表于 2017-1-5 09:39 | 显示全部楼层 |阅读模式
fweff32f.gif




保存练习,请多多指出错误和意见,谢谢!
 楼主| 发表于 2017-1-5 09:39 | 显示全部楼层
Option Explicit

'主程序
Dim PicPath As String
Sub test()
    Application.ScreenUpdating = False
    PicPath = Application.GetOpenFilename()
    If PicPath = "False" Then End

    Call Style(1, 1, 1)
    Call Style(2, -1, 1)
    Call Style(3, 1, -1)
    Call Style(4, -1, -1)
    Sheets(1).Select
End Sub

'清除
Private Sub ClearObject()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoLinkedPicture Or shp.Type = msoLine Or shp.Type = msoAutoShape Then shp.Delete
    Next shp
End Sub

'斐波纳契数列
Function Fib(n)
    If n = 0 Then
        Fib = 0
    ElseIf n = 1 Then
        Fib = 1
    Else
        Fib = Fib(n - 1) + Fib(n - 2)
    End If
End Function

'某种样式
Sub Style(idx, x, y)
    Dim L, T, W, H
    Dim BeginX, BeginY, EndX, EndY
    Dim Gold As Double
    Dim i As Integer
    Dim n As Integer

    Sheets(idx).Select
    Range("A1").Select
    n = 8

    Call ClearObject
    With ActiveSheet.Pictures.Insert(PicPath)
        L = .Left: T = .Top: W = .Width: H = .Height
    End With

    '根据工作表索引,确定第1个Begin和第1个End。
    Select Case idx
    Case 1
        BeginX = L: BeginY = T: EndX = L + W: EndY = T
    Case 2
        BeginX = L + W: BeginY = T: EndX = L: EndY = T
    Case 3
        BeginX = L: BeginY = T + H: EndX = L + W: EndY = T + H
    Case 4
        BeginX = L + W: BeginY = T + H: EndX = L: EndY = T + H
    End Select

    For i = 1 To n
        Gold = Fib(n - i) / (Fib(n - i) + Fib(n + 1 - i))

        If i Mod 2 Then
            BeginX = BeginX + x * W * Gold
            'BeginY 不变
            EndX = BeginX
            EndY = BeginY + y * H
            W = W * Gold
            x = x * -1
        Else
            'BeginX 不变
            BeginY = BeginY + y * H * Gold
            EndX = BeginX + x * W
            EndY = BeginY
            H = H * Gold
            y = y * -1
        End If

        'Call NewShape(BeginX, BeginY, 60, 20, "Begin " & i, 255 ^ 2)    '测试
        'Call NewShape(EndX, EndY, 60, 20, "End " & i, 255)              '测试
        Call NewLine(BeginX, BeginY, EndX, EndY)
    Next i
End Sub

'创建直线
Sub NewLine(BeginX, BeginY, EndX, EndY)
    With ActiveSheet.Shapes.AddLine(BeginX, BeginY, EndX, EndY)
        .line.ForeColor.RGB = IIf(Sheets(5).[L8] = "彩色", _
                                  RGB(255 * Rnd, 255 * Rnd, 255 * Rnd), _
                                  RGB(255, 255, 255))
        .line.Weight = 2
    End With
End Sub

'创建矩形
Sub NewShape(L, T, W, H, Text, Color)
    With ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, L, T, W, H)
        .Fill.Visible = msoFalse
        .line.ForeColor.RGB = Color
        .line.Weight = 0.5
        .TextFrame2.TextRange.Characters.Text = Text
        .TextFrame2.TextRange.Font.Fill.ForeColor.RGB = Color
    End With
End Sub

构图28.rar (187.11 KB, 下载次数: 23)
回复

使用道具 举报

 楼主| 发表于 2017-1-5 10:05 | 显示全部楼层
回复

使用道具 举报

发表于 2017-1-5 10:13 | 显示全部楼层
真是神了,用得到。谢谢
回复

使用道具 举报

 楼主| 发表于 2017-1-5 10:27 | 显示全部楼层
qqyyh 发表于 2017-1-5 10:13
真是神了,用得到。谢谢

谢谢,希望能做的更好些
回复

使用道具 举报

发表于 2017-1-5 14:46 | 显示全部楼层
我福,我柯
回复

使用道具 举报

发表于 2017-10-10 09:02 | 显示全部楼层
蛮好,谢谢
回复

使用道具 举报

发表于 2018-2-24 17:01 | 显示全部楼层
真是神了!好好学习吧!
回复

使用道具 举报

发表于 2018-4-10 18:45 | 显示全部楼层
怎样才能符合
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 15:15 , Processed in 0.370227 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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