Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerpoint VBA宏将所有选定对象调整为最大对象_Vba_Powerpoint - Fatal编程技术网

Powerpoint VBA宏将所有选定对象调整为最大对象

Powerpoint VBA宏将所有选定对象调整为最大对象,vba,powerpoint,Vba,Powerpoint,背景 我添加了一个外接程序,它执行以下操作: 对于所有选定的powerpoint对象(例如4个矩形),外接程序将调整所有对象的高度和宽度,以匹配选择中最大对象的高度和宽度 我试图编写一个VBA宏来复制此外接程序,但什么也没发生(修改以下问题中的代码:): 问题 有没有关于如何使这段代码工作的想法?经过进一步研究,这里有一段代码可以工作(不确定它是否真的有效,因为我是VBA新手): Sub resizeral() 暗w为双色 双倍调暗h 形状暗淡的物体 w=0 h=0 '在选定的所有对象中循环,以

背景

我添加了一个外接程序,它执行以下操作: 对于所有选定的powerpoint对象(例如4个矩形),外接程序将调整所有对象的高度和宽度,以匹配选择中最大对象的高度和宽度

我试图编写一个VBA宏来复制此外接程序,但什么也没发生(修改以下问题中的代码:):

问题


有没有关于如何使这段代码工作的想法?

经过进一步研究,这里有一段代码可以工作(不确定它是否真的有效,因为我是VBA新手):

Sub resizeral()
暗w为双色
双倍调暗h
形状暗淡的物体
w=0
h=0
'在选定的所有对象中循环,以将最大宽度和高度指定给w和h
对于i=1到ActiveWindow.Selection.ShapeRange.Count
Set obj=ActiveWindow.Selection.ShapeRange(一)
如果目标宽度>w,则
w=物体宽度
如果结束
如果目标高度>h,则
h=物体高度
如果结束
下一个
'如果选定对象的高度或宽度小于h/w,则遍历所有对象以调整其大小
对于i=1到ActiveWindow.Selection.ShapeRange.Count
Set obj=ActiveWindow.Selection.ShapeRange(一)
如果目标宽度小于w,则
物体宽度=w
如果结束
如果目标高度
从理论上讲,您可以应用一些小的调整来提高效率。但实际上,你不太可能看到不同之处。谢谢你的反馈!(我使用您的外接程序说明将此宏添加到我的ppt中)。
Sub test()
    Dim w As Double
    Dim h As Double
    Dim obj As Shape

    w = 0
    h = 0

    For i = 1 To ActiveWindow.Selection.ShapeRange.Count
        Set obj = ActiveWindow.Selection.ShapeRange(i)
        If obj.Width > w Then
            w = obj.Width
        Else
            obj.Width = w
        End If

        If obj.Height > h Then
            h = obj.Height
        Else
            obj.Height = h
        End If
    Next
End Sub
Sub resizeAll()
    Dim w As Double
    Dim h As Double
    Dim obj As Shape

    w = 0
    h = 0

    ' Loop through all objects selected to assign the biggest width and height to w and h
    For i = 1 To ActiveWindow.Selection.ShapeRange.Count
        Set obj = ActiveWindow.Selection.ShapeRange(i)
        If obj.Width > w Then
            w = obj.Width
        End If

        If obj.Height > h Then
            h = obj.Height
        End If
    Next

    ' Loop through all objects selected to resize them if their height or width is smaller than h/w
    For i = 1 To ActiveWindow.Selection.ShapeRange.Count
        Set obj = ActiveWindow.Selection.ShapeRange(i)
        If obj.Width < w Then
            obj.Width = w
        End If

        If obj.Height < h Then
            obj.Height = h
        End If
    Next
End Sub