ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 之前的求助内容简化下!~~~~~~~~~~~~

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-11-15 09:29 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 duquancai 于 2016-11-15 09:34 编辑
笑九方 发表于 2016-11-15 09:26
特别感谢 @duquancai


把上述提取的页码按照打印页码范围的格式直接输入到打印对话框内并打印。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-15 09:49 | 显示全部楼层
本帖最后由 笑九方 于 2016-11-15 09:54 编辑

代码执行有点问题 有的页码明明黑白的  说是彩色的 我在第一页放的按钮   第一页永远认为是彩色
  1. Private Sub CommandButton1_Click()
  2.    Dim rng As Range, d As Object, Act As Document, k, i%, Ds As Range
  3.    Application.ScreenUpdating = False
  4.    Set d = CreateObject("Scripting.Dictionary")
  5.    Set Act = ActiveDocument
  6.    On Error Resume Next
  7.    For i = 1 To Act.ActiveWindow.ActivePane.Pages.Count
  8.       Set rng = Selection.GoTo(1, 1, i).Bookmarks("\page").Range
  9.       If rng.InlineShapes.Count + rng.ShapeRange.Count > 0 Then
  10.          d.Add i, "": GoTo 100
  11.       Else
  12.          Set Ds = rng.Duplicate
  13.          With Ds.Find
  14.             .Text = "[!^13]{1,}"
  15.             .MatchWildcards = True
  16.             Do While .Execute
  17.                If Not .Parent.InRange(rng) Then Exit Do
  18.                If .Parent.HighlightColorIndex <> wdAuto Or .Parent.Font.ColorIndex <> wdAuto Then
  19.                   d.Add i, "": Exit Do
  20.                End If
  21.             Loop
  22.          End With
  23.       End If
  24. 100      Next
  25.    t = d.keys
  26.    For i = 0 To d.Count - 1
  27.       If i = 0 Then
  28.          s = t(0)
  29.       Else
  30.          If t(i) - t(i - 1) = 1 Then
  31.             s = s & "|" & t(i)
  32.          Else
  33.             s = s & "," & t(i)
  34.          End If
  35.       End If
  36.    Next
  37.    With CreateObject("VBScript.Regexp")
  38.       .Global = True: .Pattern = "\|[|\d]+\|"
  39.       s = Replace(.Replace(s, "-"), "|", "-")
  40.    End With
  41.    Open Act.Path & "\页码.txt" For Output As #1
  42.    Print #1, "图形/图片/彩色字/高亮字所在页码为:" & s
  43.    Close #1
  44.    Application.ScreenUpdating = True
  45.    MsgBox "页码已经输出到同文件夹下的TXT文本!"
  46. End Sub
复制代码
测试2.zip (1.77 MB, 下载次数: 8)

TA的精华主题

TA的得分主题

发表于 2016-11-15 10:06 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
笑九方 发表于 2016-11-15 09:49
代码执行有点问题 有的页码明明黑白的  说是彩色的 我在第一页放的按钮   第一页永远认为是彩色

有问题就对了!没问题才不对。呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-15 11:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2016-11-15 10:06
有问题就对了!没问题才不对。呵呵

大拿    求解~~~~~

TA的精华主题

TA的得分主题

发表于 2016-11-15 12:23 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-15 14:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-11-15 15:06 | 显示全部楼层
笑九方 发表于 2016-11-15 09:49
代码执行有点问题 有的页码明明黑白的  说是彩色的 我在第一页放的按钮   第一页永远认为是彩色

第一页 有按钮,按钮是图片,所以第一页永远会输出,除非把按钮删除!或者从第二页(或者第三页,或者第N页。。。。)开始提取!
详见代码:
  1. Private Sub CommandButton1_Click()
  2. '   输出只需要彩色打印的页码至txt文本,以便降低打印成本!
  3.    Dim rng As Range, d As Object, Act As Document, k, i%, oSt%
  4.    Dim oRang As Range, oPara As Paragraph, mt, t, s, m, n, oEt%
  5.    Application.ScreenUpdating = False
  6.    Set d = CreateObject("Scripting.Dictionary")
  7.    Set Act = ActiveDocument
  8.    oEt = Act.ActiveWindow.ActivePane.Pages.Count
  9.    oSt = InputBox("输入开始页码", , "1")
  10.    If oSt = oEt Then Exit Sub
  11.    For i = oSt To oEt
  12.       Set rng = Selection.GoTo(1, 1, i).Bookmarks("\page").Range
  13.       If rng.InlineShapes.Count + rng.ShapeRange.Count > 0 Then
  14.          d(i) = "": GoTo 100
  15.       Else
  16.          With CreateObject("VBScript.Regexp")
  17.             .Global = True: .Pattern = "[^\x07\s\u3000\0a\x0b]"
  18.             For Each oPara In rng.Paragraphs
  19.                For Each mt In .Execute(oPara.Range.Text)
  20.                   m = mt.FirstIndex: n = mt.Length
  21.                   Set oRang = ActiveDocument.Range(oPara.Range.Start + m, oPara.Range.Start + m + n)
  22.                   clo = oRang.Font.ColorIndex: gls = oRang.HighlightColorIndex
  23.                   If gls <> 0 Or (clo <> 0 And clo <> 1 And clo <> 8 And clo <> 9999999) Then
  24.                      d(i) = "": GoTo 100
  25.                   End If
  26.                Next
  27.             Next
  28.          End With
  29.       End If
  30. 100      Next
  31.    t = d.keys
  32.    For i = 0 To d.Count - 1
  33.       If i = 0 Then
  34.          s = t(0)
  35.       Else
  36.          If t(i) - t(i - 1) = 1 Then
  37.             s = s & "|" & t(i)
  38.          Else
  39.             s = s & "," & t(i)
  40.          End If
  41.       End If
  42.    Next
  43.    With CreateObject("VBScript.Regexp")
  44.       .Global = True: .Pattern = "\|[|\d]+\|"
  45.       s = Replace(.Replace(s, "-"), "|", "-")
  46.    End With
  47.    Open Act.Path & "\页码.txt" For Output As #1
  48.    Print #1, "需要彩打的页码为:" & vbCrLf & s
  49.    Close #1
  50.    Application.ScreenUpdating = True
  51.    MsgBox "页码已输出到同文件夹下的TXT文本!"
  52. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-15 15:26 | 显示全部楼层
代码执行效率很高!  200多页 也没出现卡死情况

实际操作中  我看了下还需要输出 不需要彩打的页码为:

我自己先试试看  不行再来请教~~~~~~~~

TA的精华主题

TA的得分主题

发表于 2016-11-15 20:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
笑九方 发表于 2016-11-15 15:26
代码执行效率很高!  200多页 也没出现卡死情况

实际操作中  我看了下还需要输出 不需要彩打的页码为:
...

这句     .Global = True: .Pattern = "[^\x07\s\u3000\0a\x0b]"
改为     .Global = True: .Pattern = "[^\x07\s\u3000\x0a]"

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-16 17:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 笑九方 于 2016-11-17 10:01 编辑

解决了~~~~~~~~~~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 14:06 , Processed in 0.027333 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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