zhangmengqtzm 发表于 2024-9-30 12:15:52

【探讨】VBA_GMS 物体处理速度加快方法

本帖最后由 zhangmengqtzm 于 2024-9-30 12:18 编辑

做了几个小快捷按钮,工作当中感觉比较常用,也算是提高工作效率吧。但发现有个问题出现了,就是【选区文本】(只选择当前选区内的文本)和【文本之外】(选择当前选区内除文本之外的物件),选择选区内文本这个命令还比较快,基本上能达到秒选。但文本之外命令时目前使用的是排除字体法要排除每一个字体,排除效率太低下。能不能通过VB代码优化也能达到秒选,就像【智能居中】和【全部转黑】达到这样的效率,感觉蘭公子做的CPG插件那样达到秒选的感觉!可惜不会CPG编程,仅会一点VB。哪位大佬把代码优化一下,不胜感谢!

(我原本思路是想着把字体先选出来group群组一下,再排除一下这个group,排除一个组比分别排除肯定快一些,但未能如愿)

ActiveDocument.Unit = cdrMillimeter
Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
OrigSelection.UngroupEx
OrigSelection.Shapes.FindShapes(Type:=cdrTextShape).RemoveFromSelection
End Sub



还有就是变换字体,小批量还不怎么明显,大批量修改字体时,变换字体的速度也是慢也达不到秒变的效率。
Sub ChangeFontTo(ByVal fontName As String)
    Dim sr As Shape
      For Each sr In ActiveSelection.Shapes
            If sr.Type = cdrTextShape Then
                If sr.Text.Selection.Length <> 0 Then
                  sr.Text.Selection.LanguageID = 2052
                  sr.Text.Selection.font = fontName
                Else
                  sr.Text.Story.LanguageID = 2052
                  sr.Text.Story.font = fontName
                End If
            End If
      Next sr
End Sub



jiangyu 发表于 2024-9-30 12:44:21

换2020以上的版本,代码运行能快一倍。

landboy 发表于 2024-9-30 18:46:38

'// CorelDRAW 窗口刷新优化和关闭
Public Function BeginOpt(Optional ByVal name As String = "Undo")
EventsEnabled = False
ActiveDocument.BeginCommandGroup name
' ActiveDocument.SaveSettings
ActiveDocument.Unit = cdrMillimeter
Optimization = True
' ActiveDocument.PreserveSelection = False
End Function

Public Function EndOpt()
' ActiveDocument.PreserveSelection = True
' ActiveDocument.RestoreSettings
EventsEnabled = True
Optimization = False
EventsEnabled = True
ActiveDocument.ReferencePoint = cdrBottomLeft
Application.Refresh
ActiveDocument.EndCommandGroup
End Function

需要刷新 软件窗口的,可以先关闭刷新,等完成后再操作

API.BeginOpt
把你的功能放这个 优化中间
API.EndOpt

zhangmengqtzm 发表于 2024-9-30 19:24:53

landboy 发表于 2024-9-30 18:46
需要刷新 软件窗口的,可以先关闭刷新,等完成后再操作

谢谢蘭老大的指点,非常感谢!

Vanioc 发表于 2024-9-30 20:44:39

这个是什么插件

petergh 发表于 2024-9-30 22:21:24

landboy 发表于 2024-9-30 18:46
需要刷新 软件窗口的,可以先关闭刷新,等完成后再操作

请教,怎么判断按鼠标左键时是否有同时按Ctrl键?

landboy 发表于 2024-10-1 20:55:47

petergh 发表于 2024-9-30 22:21
请教,怎么判断按鼠标左键时是否有同时按Ctrl键?

你可以安装我的 开源插件,开源码,一般是 一个图标三个功能, 左键 右键 按ctrl
其实最多的可以一个按钮 5个功能

petergh 发表于 2024-10-5 11:57:38

landboy 发表于 2024-10-1 20:55
你可以安装我的 开源插件,开源码,一般是 一个图标三个功能, 左键 右键 按ctrl
其实最多的可以一个按钮 ...

我查看了你发的主题贴,开源的只找到这个有关流水号的。https://www.52cnp.com/forum.php?mod=viewthread&tid=20063
可以提供你的开源插件链接吗?
页: [1]
查看完整版本: 【探讨】VBA_GMS 物体处理速度加快方法