Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2916|回复: 8

[已解决]求助为什么提取数据时找不到数据源会出错呢。谢谢

[复制链接]
发表于 2013-7-24 15:07 | 显示全部楼层 |阅读模式
本帖最后由 qinhuan66 于 2013-7-24 15:15 编辑

求助为什么提取数据时找不到数据源会出错呢。谢谢
生成准考证.rar (201.85 KB, 下载次数: 31)
发表于 2013-7-24 17:45 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-7-24 17:48 | 显示全部楼层
hwc2ycy 发表于 2013-7-24 17:45
取消是什么意思?
结束还是?

老师是的就是结束的意思
回复

使用道具 举报

发表于 2013-7-24 18:29 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton13_Click()
  2.    Unload Me
  3. End Sub

  4. Private Sub CommandButton4_Click()
  5.     Dim Word对象 As New Word.Application, shp As Object
  6.     Dim 当前路径 As String, 导出文件名 As String, 导出路径文件名 As String, 判断
  7.     Dim k As Long, l As Long, i As Long, j As Long
  8.     Dim strPhoto As String
  9.     Dim B As Long, C As Long
  10.     Dim btn As Long
  11.     strPhoto = ThisWorkbook.Path & "\相片"
  12.     当前路径 = ThisWorkbook.Path & "\准考证发放包"

  13.     最后行号 = Sheets("数据库").Range("B1002").End(xlUp).Row

  14.     B = Application.InputBox("请输入数据开始行,不能小于3行。", Title:="提示", Type:=1)
  15.     C = Application.InputBox("请输入数据结束行,不能大于" & 最后行号 & " 行。", "提示", Type:=1)

  16.     If B <= 0 Or C <= 0 Then
  17.         MsgBox "输入的行号有小于等于0或者取消的情况,结束", vbCritical
  18.         Exit Sub
  19.     End If

  20.     If B < 3 Then
  21.         MsgBox "数据开始行的行号不符合要求,结束", vbCritical
  22.         Exit Sub
  23.     End If

  24.     If C > 最后行号 Then
  25.         MsgBox "数据结束行的行号不符合要求,结束", vbCritical
  26.         Exit Sub
  27.     End If

  28.     If C < B Then
  29.         MsgBox "数据结束行的行号不得小于起始行的行号,结束", vbCritical
  30.         Exit Sub
  31.     End If

  32.     'b = InputBox("请输入数据开始行,不能小于3行。", "提示")
  33.     'C = InputBox("请输入数据结束行,不能大于" & 最后行号 & " 行。", "提示")


  34.     判断 = 0
  35.     导出文件名 = "准考证(参加本次考试全部人员).doc"
  36.     导出路径文件名 = 当前路径 & "" & 导出文件名
  37.     FileCopy 当前路径 & "\准考证打印模板.doc", 导出路径文件名
  38.     With Word对象

  39.         .Documents.Open 导出路径文件名
  40.         .Application.ScreenUpdating = False
  41.         .Application.DisplayAlerts = False
  42.         '.Visible = True
  43.         .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument    '设置位置在正文
  44.         .Selection.WholeStory    '全选
  45.         .Selection.Copy    '复制
  46.         If 最后行号 > 3 Then
  47.             For i = 3 To C - 1    '复制页
  48.                 .Selection.EndKey Unit:=wdStory    '光标置于文件尾
  49.                 .Selection.InsertBreak Type:=wdPageBreak    '分页
  50.                 .Selection.PasteAndFormat (wdPasteDefault)    '粘贴
  51.             Next i
  52.             Me.Label1.Caption = "正在生成第 " & i & "行记录"
  53.         End If
  54.         Set shp = .ActiveDocument.Shapes

  55.         For i = B To C
  56.             Me.Label1.Caption = "正在生成第 " & i - B + 1 & " 页数据"
  57.             For j = 1 To 10    '填写文字数据
  58.                 Str1 = "数据" & Format(j, "000")
  59.                 Str2 = Sheets("数据库").Cells(i, j)
  60.                 .Selection.HomeKey Unit:=wdStory    '光标置于文件首
  61.                 If .Selection.Find.Execute(Str1) Then    '查找到指定字符串
  62.                     .Selection.Font.Color = wdColorAutomatic    '字符为自动颜色
  63.                     .Selection.Text = Str2    '替换字符串
  64.                 End If
  65.             Next j
  66.             For k = l + 1 To shp.Count
  67.                 If shp(k).Type = 17 Then Exit For
  68.             Next
  69.             l = k
  70.             On Error GoTo ErrorHandler
  71.             shp(k).Fill.UserPicture strPhoto & Sheets("数据库").Cells(i, 1) & ".jpg"
  72.             Err.Clear
  73.             On Error GoTo 0
  74.         Next i
  75.     End With
  76.     Word对象.Documents.Save
  77.     Word对象.Quit
  78.     Set Word对象 = Nothing
  79.     If 判断 = 0 Then
  80.         i = MsgBox("朋友你需要的准考证已生成完毕,现已保存到“" & 导出路径文件名 & "”!如需要帮助请QQ联系695360052", 0 + 48 + 256 + 0, "提示:"): Unload 登录操作界面
  81.     End If
  82.     Exit Sub
  83. ErrorHandler:

  84.     'btn = MsgBox(prompt:="错误信息号码:" & Err.Number & vbCrLf & "错误信息描述:" & Err.Description & vbCrLf, Buttons:=vbInformation + vbAbort + vbIgnore) = vbRetry
  85.     btn = MsgBox("错误信息号码:" & Err.Number & vbCrLf & "错误信息描述:" & Err.Description & vbCrLf, vbAbortRetryIgnore)
  86.     Select Case btn
  87.         Case vbRetry
  88.             Resume
  89.         Case vbIgnore
  90.             Resume Next
  91.         Case vbAbort
  92.             With Word对象
  93.                 .ActiveDocument.Close False
  94.                 .Quit
  95.             End With
  96.             Set Word对象 = Nothing
  97.             MsgBox "结束"
  98.             Me.Label1.Caption = ""
  99.     End Select
  100. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 谢谢您老师,这些功能真是太强大了。谢谢

查看全部评分

回复

使用道具 举报

发表于 2013-7-24 18:30 | 显示全部楼层
其实用模板方法还比较好,省得去COPY,有时WORD对象没有退出的话,就会报错了。
回复

使用道具 举报

发表于 2013-7-24 18:36 | 显示全部楼层
用模板的方法建立WORD文件。
  1. Private Sub CommandButton4_Click()
  2.     Dim Word对象 As New Word.Application, shp As Object
  3.     Dim 当前路径 As String, 导出文件名 As String, 导出路径文件名 As String, 判断
  4.     Dim k As Long, l As Long, i As Long, j As Long
  5.     Dim strPhoto As String
  6.     Dim B As Long, C As Long
  7.     Dim btn As Long
  8.     strPhoto = ThisWorkbook.Path & "\相片"
  9.     当前路径 = ThisWorkbook.Path & "\准考证发放包"

  10.     最后行号 = Sheets("数据库").Range("B1002").End(xlUp).Row

  11.     B = Application.InputBox("请输入数据开始行,不能小于3行。", Title:="提示", Type:=1)
  12.     C = Application.InputBox("请输入数据结束行,不能大于" & 最后行号 & " 行。", "提示", Type:=1)

  13.     If B <= 0 Or C <= 0 Then
  14.         MsgBox "输入的行号有小于等于0或者取消的情况,结束", vbCritical
  15.         Exit Sub
  16.     End If

  17.     If B < 3 Then
  18.         MsgBox "数据开始行的行号不符合要求,结束", vbCritical
  19.         Exit Sub
  20.     End If

  21.     If C > 最后行号 Then
  22.         MsgBox "数据结束行的行号不符合要求,结束", vbCritical
  23.         Exit Sub
  24.     End If

  25.     If C < B Then
  26.         MsgBox "数据结束行的行号不得小于起始行的行号,结束", vbCritical
  27.         Exit Sub
  28.     End If

  29.     'b = InputBox("请输入数据开始行,不能小于3行。", "提示")
  30.     'C = InputBox("请输入数据结束行,不能大于" & 最后行号 & " 行。", "提示")


  31.     判断 = 0
  32.     导出文件名 = "准考证(参加本次考试全部人员).doc"
  33.     导出路径文件名 = 当前路径 & "" & 导出文件名

  34.     'FileCopy 当前路径 & "\准考证打印模板.doc", 导出路径文件名
  35.     With Word对象

  36.         '.Documents.Open 导出路径文件名
  37.         .Documents.Add Template:=当前路径 & "\准考证打印模板.doc"
  38.         .Application.ScreenUpdating = False
  39.         .Application.DisplayAlerts = False
  40.         '.Visible = True
  41.         .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument    '设置位置在正文
  42.         .Selection.WholeStory    '全选
  43.         .Selection.Copy    '复制
  44.         If 最后行号 > 3 Then
  45.             For i = 3 To C - 1    '复制页
  46.                 .Selection.EndKey Unit:=wdStory    '光标置于文件尾
  47.                 .Selection.InsertBreak Type:=wdPageBreak    '分页
  48.                 .Selection.PasteAndFormat (wdPasteDefault)    '粘贴
  49.             Next i
  50.             Me.Label1.Caption = "正在生成第 " & i & "行记录"
  51.         End If
  52.         Set shp = .ActiveDocument.Shapes

  53.         For i = B To C
  54.             Me.Label1.Caption = "正在生成第 " & i - B + 1 & " 页数据"
  55.             For j = 1 To 10    '填写文字数据
  56.                 Str1 = "数据" & Format(j, "000")
  57.                 Str2 = Sheets("数据库").Cells(i, j)
  58.                 .Selection.HomeKey Unit:=wdStory    '光标置于文件首
  59.                 If .Selection.Find.Execute(Str1) Then    '查找到指定字符串
  60.                     .Selection.Font.Color = wdColorAutomatic    '字符为自动颜色
  61.                     .Selection.Text = Str2    '替换字符串
  62.                 End If
  63.             Next j
  64.             For k = l + 1 To shp.Count
  65.                 If shp(k).Type = 17 Then Exit For
  66.             Next
  67.             l = k
  68.             On Error GoTo ErrorHandler
  69.             shp(k).Fill.UserPicture strPhoto & Sheets("数据库").Cells(i, 1) & ".jpg"
  70.             Err.Clear
  71.             On Error GoTo 0
  72.         Next i

  73.         .ActiveDocument.SaveAs Filename:=当前路径 & "\准考证打印模板.doc"
  74.         .Quit
  75.     End With
  76.     Set Word对象 = Nothing
  77.     If 判断 = 0 Then
  78.         i = MsgBox("朋友你需要的准考证已生成完毕,现已保存到“" & 导出路径文件名 & "”!如需要帮助请QQ联系695360052", 0 + 48 + 256 + 0, "提示:"): Unload 登录操作界面
  79.     End If
  80.     Exit Sub

  81. ErrorHandler:
  82.     'btn = MsgBox(prompt:="错误信息号码:" & Err.Number & vbCrLf & "错误信息描述:" & Err.Description & vbCrLf, Buttons:=vbInformation + vbAbort + vbIgnore) = vbRetry
  83.     btn = MsgBox("错误信息号码:" & Err.Number & vbCrLf & "错误信息描述:" & Err.Description & vbCrLf, vbAbortRetryIgnore)
  84.     Select Case btn
  85.         Case vbRetry
  86.             Resume
  87.         Case vbIgnore
  88.             Resume Next
  89.         Case vbAbort
  90.             With Word对象
  91.                 .ActiveDocument.Close False
  92.                 .Quit
  93.             End With
  94.             Set Word对象 = Nothing
  95.             MsgBox "结束"
  96.             Me.Label1.Caption = ""
  97.     End Select
  98. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 谢谢您老师!真的非常谢谢您。谢谢

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-7-24 19:48 | 显示全部楼层
hwc2ycy 发表于 2013-7-24 18:29

老师是否能帮手改一手导出的准考证以生成多少人作文件名(例如从3行开始至12行结束的话:生成为“准考证(编号1--编号10)、如果从15行开始到25行的话就生成为”准考证(编号13--编号23)谢谢
如下图
2013-07-24_194215.gif
回复

使用道具 举报

发表于 2013-7-24 21:48 | 显示全部楼层
qinhuan66 发表于 2013-7-24 19:48
老师是否能帮手改一手导出的准考证以生成多少人作文件名(例如从3行开始至12行结束的话:生成为“准考证( ...

15-25变成13-23?有什么规律没?
回复

使用道具 举报

 楼主| 发表于 2013-7-24 21:55 | 显示全部楼层
hwc2ycy 发表于 2013-7-24 21:48
15-25变成13-23?有什么规律没?

没有?我的意思是有时人太多。分段生成准考证。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-17 06:51 , Processed in 0.287759 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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