ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 43953|回复: 79

[求助]设置自选图形的默认效果及画布增删

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-8-7 22:02 | 显示全部楼层 |阅读模式

局限——“一次性”的默认效果设置:

  Word的“设置自选图形的默认效果”功能只能使用一次,比如说把一个文本框的“填充颜色”设为黄色、“线形”设为3磅,那么,此后不论是你画流程图也好,画圆形也好,画直线也好,边线的宽度总为3磅,而填充颜色总是黄色。

要求——“多次性”的默认效果设置:

  (前提——都在“绘图画布”里作图。即在同一个画布里不断添加以下图形,最终将所有图形对齐、组合为一个图形)

  ①凡是画“流程图→可选过程”,都是以下效果:“填充颜色”为自定义颜色(RGB模式:红255,绿255,蓝197),“线形”为0.25磅,高度为0.65厘米,处于已“添加文字”状态(即此流程图内有光标在闪动),设置“自选图形格式→文本框→内部边距”为左右各0.15厘米,上下各0.03厘米。

  ②凡是画“流程图→过程”(或者是“文本框”),都是以下效果:无填充颜色,“线形”为1磅,高度为0.68厘米,也是处于已“添加文字”状态,设置“自选图形格式→文本框→内部边距”为左右各0.15厘米,上下各0.09厘米。

  ③凡是画“连接符”,“线形”都为0.25磅,始端都为圆形箭头。

  ④另类要求:

  A:第①种、第②种要求画出的,“高度”都要为所要求的高度(即第①种流程图一画出来,高度总是0.65厘米,第②种流程图一画出来总是0.68厘米),而长度则随心所欲在画图时爱拖多长拖多长。

  B:甚至,第①种、第②种里还有分别有两种“子类”,即我点按绘图工具栏上自定义的甲按钮,画出的总是高度为0.65厘米的“流程图→可选过程”;乙按钮,画出的总是高度为1.28厘米的“流程图→可选过程”;丙按钮,画出高度0.68厘米的“流程图→过程”(或者是“文本框”);丁按钮,画出高度1.38厘米的“流程图→过程”(或者是“文本框”)。

附带问题——绘图画布的随意增删:

  “绘图画布”已经设置为“嵌入型”,我将同一个画布里的全部图形组合成一个“大图形”后,现在要把画布去除,只留下“大图形”——亦即说,这个“大图形”也已经自动变成了“嵌入型”的,而且就是在原来绘图画布的位置。粗粗看去,就好像只是去除了“画布”一样。

  反之,我已经把某个“大图形”的画布去除了(“大图形”是“嵌入型”的),现在发现某个局部还需要修改,如何为“大图形”添加一个画布呢?——这个画布看去就如同“大图形”一般大小,也是在原来“大图形”所在的位置。

  好久没有到“家”里了,一“回家”便给大家带来这样的麻烦,惭愧得紧!

  只是以上这些问题十分困扰小弟,在现实应用中都只能用手工不断地一个一个图形去调整,重复劳动量太大,只好回家里来“求救”了!

  “家”里关于这个问题的帖子小弟通览了一下,小弟尚无法举一反三,特此再辟一主题,请大家多多指教!小弟感激在心!

TA的精华主题

TA的得分主题

发表于 2006-8-8 06:57 | 显示全部楼层

好久不见雨雪霏霏兄了,近来可好?有些想念了,呵呵。

我对于您的第一个问题的初步想法:

基本放弃使用设置自选图形默认格式的方法,可以参考的方法有:

1:使用CTRL+鼠标移动法,每次直接获得目标图形的副本,其格式完全一致。

2:使用剪贴板,把需要固定格式的自选图形复制于剪贴板上,每次调用它粘贴后再修改。

3:使用VBA法,有三种方式

A,全部结束(每一个阶段或者每个图形绘制结束)后进行设置,即按下指定按钮,运行指定的格式设置过程,该过程中提供了根据所选图形名称的方法,自动设置其相应的格式,并且可以选择“甲类”还是“乙类”。

B,使用“模板法”,将每种自选图形的格式固定后成为一个模板(有利于以后随时改变),使用Pickup方法复制指定图形格式,再使用APPLY方法粘贴图形格式,此法也应使用按钮操作,可根据所选图形自动设置,其灵活性较A为高。

C,在当前文档中,使用设置自选图形默认格式,有N个已固定格式的自选图形,相当于“模板”,即当需要绘制前单击一个命令,如“设置矩形框自选图形格式”时,程序自动应用“矩形框模板”的图形格式,如需要绘制线条前(哪怕有线条类型1,线条类型2),单击一个命令(当然会有很多按钮,可做成工具栏),程序自动应用“线条模板”的图形格式。不一一例举。

看一下,是否可行?

至于第二个问题,先等第一个问题解决了再说吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 10:29 | 显示全部楼层

谢谢老大的“图形模板”妙想(1)

  哈哈,老大想念之语,暖透小弟腑脏啊!这家是越来越让小弟牵挂了!老大更是在小弟心头“挥之不去”了!(呵呵,幸好老大不是女的)

  这一段时间一则忙于梳理各种笔记,二则网络有些问题(昨天刚修好),三则时间颇紧,便不敢“回家”了,知道一“回家”必然沉溺其中“无法自拔”。尽管如此,小弟还是八九天上一回网吧,“回家”瞄一眼(没有“登录”,只以“客人”身份),看看老大孔兄如意(不知道叫JJ还是叫MM——才高,遂难开口叫“MM”)两个太阳一个月亮都还在天上,心里才能放得下。——不论走到哪里,心中都系念Word版块啊!这是一个极纯粹的地方,三位版主用打磨精品书的态度来厚待Word版块、厚待兄弟姐妹,几乎随便翻一个帖子进去,都能让人感觉到Word版块独有的厚实香馨。

  对小弟这一帖,老大一早就回了550多字,条列种种妙法,前头还加了一句“有些想念”了,加了一个老大不常用的“呵呵”,小弟只能反复念叨着这么一句了——“回到家的怀抱了!”    

    

  对于绘图,首先要感谢老大以前的两个帖子,小弟受益极丰:

  ①老大04年给清风版主的回帖:

http://club.excelhome.net/viewthread.php?tid=64851&replyID=&skin=0

  ②老大对于绘图技巧的精彩总结:《浅谈WORD中的绘图》

http://club.excelhome.net/viewthread.php?tid=23502  

  

  下边说说小弟平常的作图情况:

  ACtrl复制法:小弟平时多用这个方法来复制已经设置好的图形,在同一块画布内使用是颇方便的。稍有不足是,复制出来的是完全一样的图形,无法随心所欲拖长(即高度固定,长度随机)——对于这个问题的新想法是:小弟双击绘图工具栏上自定义的甲按钮,便可以连续在同一个画布里绘出高度(都为0.65厘米)等等许多格式一样、而长度随意拖展的图形(亦即与Word绘图工具栏按钮的单击与双击功能一致——单击,画一个图形,双击,则可以连续画这样的图形)。另一个严重不足,自然是在用Ctrl键复制之前,要设置好一个“原始图形”,设置的本身便极烦琐。

  B、自动图文集法:小弟试了一下,在小弟已经默认绘图时画布伴随出现的情况下,每用自动图文集,都会产生一个新的画布——也就是说,在一个绘图画布里无法使用这个方法。自然,这个方法也有A方法里的问题——每个图形都是同样的格式,无法随机定义长度。

  C、稀里糊涂VBA法:小弟不懂VBA,而“录制宏”功能在设置自选图形格式的时候又无法使用,所以只能到处查找相关代码,老大的《编程代码集》里没有这方面的数据,《Word2000VBA一册通》《Word排版艺术》里也没有,版块里也很少针对这个具体问题的代码,小弟最后只在《[分享]制作文本框的VBAhttp://club.excelhome.net/viewthread.php?tid=116705&replyID=&skin=0截取片段为一个宏(小弟算了一下,“高度=0.65厘米”从下边的“Height:=18.420.035288888889得来):

  Sub 文本框固定高度()

  Set myTbox = ActiveDocument.Shapes _

  .AddTextbox(Orientation:=msoTextOrientationHorizontal, _

  Left:=15, Top:=9, Width:=240, Height:=18.42)

  End Sub

  碰到的问题自然是多的,而较重要的似乎是这样的问题——使用宏,难以在同一个画布里不断添加自定义好格式的图形。

[此贴子已经被作者于2006-8-8 10:32:01编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 10:33 | 显示全部楼层

谢谢老大的“图形模板”妙想(2)

  接下来谈谈老大给小弟列出的方法:

  1Ctrl复制法,如上所述,“格式完全一致”了,但仍有不便。

  2、剪贴板法:“格式完全一致”之不便同上,另则剪贴板窗格占用编辑空间,此方法的“永久性”亦很“脆弱”。

  3VBA法——小弟尚无法完全领会老大所列的三种方式都是什么样的一种操作,只能猜测着答复如下——实在对不住老大一片苦心!

  A、“全部结束”后再设置,能够依据各图形名称分别设置对应格式,谢谢老大这样好的思路!确实实用,但对于小弟所提的“子类”(即同一名称的图形我定义了两种或更多种高度),无法作用。运用此方法之后,得对“子类”进行再调整,劳动量还很大。

  B、“模板法”,看去很诱人,可小弟对老大使用的“术语”还弄不通,真要领略其中的神奇,大概得期待老大的进一步讲解或写实用编码了——呵呵,老大别扁我!

  C、“格式默认为模板法”,这大概是小弟发这个求助帖所需要的。但不知用VBA究竟怎样实现。

 

  需要再重点说明一下:

  ①点击了绘图工具栏上自定义的甲按钮,在画布里画出的一定是0.65厘米高的图形,若要改变它的高度(如高为5厘米),只能是在画出这个图形后,再用鼠标拉伸。

  ②单击、双击这个自定义的甲按钮,分别对应画一次这种图形、连续画这种图形。

  ③进行了以上这些“高级”操作后,完全不影响Word本身的任何功能,比如还可以自由使用Word原来的右键“设置自选图形的默认效果”功能。

 

  谢谢老大的“全盘考虑”!老大把所有解法都穷尽了,“渊博”、“高明”与“诲人不倦”并彰,小弟感激万分!

 

  老大所言甚是,先解决好第一个问题!第二个问题,小弟期待老大与大家下一步赐教!

TA的精华主题

TA的得分主题

发表于 2006-8-8 11:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TO 雨雪霏霏兄:

如有时间,请直接将您认为是“模板”的几种自选图形以的文档上传,以帮我节省一些时间,另外,这个东东也是需要时间的,请耐心一下。

谢谢。

TA的精华主题

TA的得分主题

发表于 2006-8-8 14:31 | 显示全部楼层

做了一个示例,以下代码供参考。

Sub FormatSetUp(F As Byte)
    Dim myDoc As Document, myShape As Shape, shType As MsoShapeType
    Dim standardShape As Shape, TempFullName As String
    TempFullName = Me.Path & "\ShapeTemplate.doc"
    If Dir(TempFullName, vbDirectory) = "" Then
        MsgBox "Word未找到指定图形模板,程序无法继续!", vbExclamation
        Exit Sub
    End If
    Set myDoc = CreateObject(TempFullName)
    Set standardShape = myDoc.Shapes(F)
    standardShape.PickUp
    shType = standardShape.Type
    Select Case shType
    Case msoAutoShape
        Set myShape = Me.Shapes.AddShape(msoShapeRectangle, 0, 0, 0, 0)
    Case msoLine
        Set myShape = Me.Shapes.AddLine(0, 0, 0, 0)
    Case msoTextBox
        Set myShape = Me.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 0, 0)
    End Select
    myShape.Apply
    myShape.SetShapesDefaultProperties
    myShape.Delete
    myDoc.Close False
    Set myDoc = Nothing
End Sub
Sub S1()
    F = 1
    Call FormatSetUp(1)
End Sub
Sub S2()
    F = 2
    Call FormatSetUp(2)
End Sub
Sub S3()
    F = 3
    Call FormatSetUp(3)
End Sub
Sub S4()
    F = 4
    Call FormatSetUp(4)
End Sub
Sub S5()
    F = 5
    Call FormatSetUp(5)
End Sub
Sub S6()
    F = 6
    Call FormatSetUp(6)
End Sub

实例如下:

Nxwd5cHB.zip (14 KB, 下载次数: 75)
[此贴子已经被作者于2006-8-8 14:32:18编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 14:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

图形模板说明表

刚才小弟写好了模板样式表,不想老大已经又费了许多功夫帮助小弟写了上楼代码,小弟先把刚才写好的附件贴出来吧。

谢谢老大!午睡一定没睡好吧!小弟先敬一杯茶!

BH48UxE0.rar (13.87 KB, 下载次数: 66)


  刚才再看了一下老大的示例,果然别出心裁——唉,老大真费了功夫了——每一件作品都是艺术品啊!

  这里请老大先过目小弟的模板样式说明表,再批批小弟!——小弟对于如何活用老大的编码依然毫无头绪。唉,老大给我一只鱼我就只有一只鱼呢,小弟啥时会成为一个小小的渔夫,不再成天烦老大呢?痴想中……

  再谢老大厚谊!

[此贴子已经被作者于2006-8-8 14:57:55编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 16:30 | 显示全部楼层

图形模板初测报告

1、小弟暂时无法添加“说明表”中的图形到老大的例表中——使用以下编码,并在Test文件里添加了宏按钮到Test携带的新工具栏上,点击小弟新加的按钮,得到一系列出错提示(如附图),得注销了用户之后才可再次打开老大的例表。估计老大一指点,小弟便可正确使用老大的编码了——老大所给的示例图形,为小弟想得很细致了!谢谢老大!

Sub S5()
    F = 5
    Call FormatSetUp(5)
End Sub
Sub S6()
    F = 6
    Call FormatSetUp(6)
End Sub
Sub S7()
    F = 7
    Call FormatSetUp(7)
End Sub
Sub S8()
    F = 8
    Call FormatSetUp(8)
End Sub


2、老大的编码思路很明白干脆,直接从例表中取得默认样式应用到Test文件中,省去了极烦琐的各种格式定义,甚至是VBA无法完成的格式定义,高屋建瓴,让人叹其巧思。

由此带来的小问题似乎是——速度会略显迟滞,在各模板间进行频繁切换的话,“流畅度”有较大影响。

3、这样的思路“巧妙”的还有一点是:它并不影响对绘图工具栏按钮的单击与双击功能的使用。

伴生的问题是:画一个图形,先要到“模板工具栏”上点一下,再到绘图工具栏上点一下,才可以在画布上画出图形。这当中多了一个步骤,是否可以简省去呢?

小弟的思考是:①不可省,因为这样最简便,可以随机搭配使用两个工具栏上的按钮,得出许多效果,是编码与界面的“最经济原则”的体现;②可省,用大量的编码逐一定义单个按钮的特定功能,求得实际运用时的“一步到位”,但这要以牺牲老大的大量脑细胞为代价,小弟罪孽将更深重!

4、还是苛刻的问题,甚至是Word无法完成的问题——如何在画布上画出固定高度的图形(长度随心所欲)?

如果无法做到这一点,只能用其他方法辅助实现:在“模板工具栏”上添加一个“高度按钮”,选定已经画好的一个或数个图形,点击这个“高度按钮”,它们便成了所需高度的图形。自然,因为需要设置不同的高度,所以,这样的“高度按钮”需要好几个。

暂时提交这么些胡话,请老大参考。谢谢老大!

[求助]设置自选图形的默认效果及画布增删

[求助]设置自选图形的默认效果及画布增删

TA的精华主题

TA的得分主题

发表于 2006-8-9 11:31 | 显示全部楼层
请楼主稍候,这个程序相对比较复杂,加之我的时间很紧,可能需要一到两天,然后再交流,再修改。

TA的精华主题

TA的得分主题

发表于 2006-8-9 14:40 | 显示全部楼层

操作方法:
单击“图形格式设置”工具栏中的命令,直接拖曳鼠标绘制出指定格式的图形,按下“CTRL+0(数字小键盘中的0)”可直接设置高度、文本框上下左右边距和选定文本框、连接符起、终点箭头样式等。
每次单击某个命令,将直接更改默认设置为模板中的自选图形格式。
每次完成自选图形绘制后,始终按下“CTRL+0”直接应用指定的格式。
如果单击某个命令后,鼠标未呈现出绘图状态时,请重启WORD
确保在本文档以及模板保存于本文档同一文件夹中。

成品如下(未经严格测试)

cZRXsvxR.zip (28.75 KB, 下载次数: 53)


以下代码供网友参考及查询:
Option Explicit
Dim myDoc As Document, F As Byte

Private Sub Document_Close()
'
退出后关闭图形模板
    On Error Resume Next
    myDoc.Close False
End Sub

Private Sub Document_Open()
'
检测并调用指定图形模板
    Dim TempFullName As String
    TempFullName = Me.Path & "\ShapesTemplate.doc"
    If Dir(TempFullName, vbDirectory) = "" Then
        MsgBox "Word
未找到指定图形模板,程序无法继续!", vbExclamation
        Exit Sub
    End If
    Set myDoc = CreateObject(TempFullName)
End Sub


[此贴子已经被作者于2006-8-9 14:41:54编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 10:45 , Processed in 0.041030 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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