假设用VBA作
如果是高版本的PPT,有平滑切换功能,可以将PPT复制一页,在第2页设置分组后的位置,对第二页的图形的横纵坐标随机排序
在PPT第1页幻灯片里插入12个矩形,作为要分组的人
点击【开始】->【选择】->【选择窗格】,在右侧可以设置图形的名称,将其设为P1-P12,便于VBA循环
插入6个无填充矩形,作为分组框
插入一个矩形,作为切换幻灯片的按钮
复制第1页幻灯片,在第2页幻灯片里将12个图形移到分组框里
在【切换】里设置两个幻灯片的切换方式为【平滑】
在【插入】->【动作】里将第1张幻灯片右上角的按钮插入动作【切换到下一张幻灯片】
在【插入】->【动作】里将第2张幻灯片右上角的按钮插入动作【切换到上一张幻灯片】
在VBA编辑器里新建一个模块,粘贴下边的代码:
Sub OnSlideShowPageChange() '幻灯片切换时运行 Dim pptPre As Presentation Dim arr(1 To 12) As Double Dim temp_rnd As Double Dim temp_left As Double Dim temp_top As Double Set pptPre = ActivePresentation If pptPre.SlideShowWindow.View.CurrentShowPosition = 1 Then '当前页为第1页时运行 Randomize '重置随机种子 For i = 1 To 12 '写入 arr(i) = Rnd Next i For i1 = 1 To 11 '根据随机数的大小对图形的横纵坐标冒泡排序,重新分配 For i2 = 2 To 12 If arr(i1) > arr(i2) Then temp_rnd = arr(i1) arr(i1) = arr(i2) arr(i2) = temp_rnd With pptPre.Slides(2) temp_left = .Shapes("P" & i1).Left .Shapes("P" & i1).Left = .Shapes("P" & i2).Left .Shapes("P" & i2).Left = temp_left temp_top = .Shapes("P" & i1).Top .Shapes("P" & i1).Top = .Shapes("P" & i2).Top .Shapes("P" & i2).Top = temp_top End With