我怎样才能使这段代码运行得更快更顺畅?

时间:2017-09-18 18:36:09

标签: vba excel-vba powerpoint-vba excel

三个问题。 使用我目前拥有的数据库,此代码在4-5分钟内运行。通常它将是一个包含100~列的数据库。我想让这更快。 我的另一个问题是我不断获得两个不同的弹出窗口: "文件现在可用于编辑" "用户当前正在编辑工作簿,您想以只读模式运行吗?" 非常烦人,但我无法忍受。 最后,我有时也会在这一行上出错: pptSlide.Shapes.PasteSpecial DataType:= ppPasteHTML,Link:= msoFalse但我所要做的就是重新运行程序,它就会消失。 我正在寻找任何建议,以使此代码运行更快,更顺畅,欢迎任何建议。 谢谢! Public Sub averageScoreRelay()     ' 1.从PPT运行并打开Excel文件     ' 2.从幻灯片1开始,找到一个包含单词" iq _"的框,如果它有这些单词,那么它后面会有数字" iq_43"或" iq_43,iq_56,iq_72"。     ' 3.在拆分和重新格式化字符串后,在打开的Excel文件中找到这些单词和数字。     ' 3.将列复制到新的表格中并重复所有" iq _' s"直到表2有一张桌子。     ' 4.将表格从xl粘贴表复制到ppt     ' 5.为每张幻灯片执行此操作 '定时器启动     Dim StartTime为Double     Dim SecondsElapsed With Double         StartTime =计时器 '创建变量     Dim xlApp作为Excel.Application     Dim xlWB作为Excel.Workbook     Dim pptSlide As Slide     昏暗的形状     Dim pptText As String     昏暗的pptPres作为对象     Dim iq_Array As Variant     Dim arrayLoop As Integer     Dim i As Integer     昏暗的myShape作为对象     Dim colNumb As Integer     昏暗的大小为整数     Dim k As Integer     Dim lRows As Long     Dim lCols As Long     '创建新的Excel实例并打开相关的工作簿     设置xlApp = New Excel.Application     ' xlApp.Visible = True'使Excel可见     设置xlWB = xlApp.Workbooks.Open(" file.xlsx",True,False ,,,, True,Notify:= False)'打开相关工作簿     如果xlWB没什么,那么'可能不需要这个if语句。稍后检查。         MsgBox("检索平均分数报告时出错,检查文件路径")         退出子     万一     xlApp.DisplayAlerts = False     使用xlWB.Worksheets(" Sheet1")         colNumb = .Cells(1,.Columns.Count).End(xlToLeft).Column     结束     '在Excel中创建一个新的空白表,应该是" Sheet2"     xlWB.Worksheets.Add After:= xlWB.ActiveSheet     '让pptPres成为ppt活跃的     设置pptPres = PowerPoint.ActivePresentation     '遍历每个pptSlide并检查IQ文本框,获取avgScore值并创建pptTable     对于pptPres.Slides中的每个pptSlide         pptSlide.Select         '搜索幻灯片中的形状         对于每个Shpe在pptSlide.Shapes             k = 1             '确定是否有文本框架             如果Shpe.HasTextFrame那么                 '确定文本框中是否有文字                 如果Shpe.TextFrame.HasText那么                     '将pptText设置为框中的文本,然后将其设为小写并修剪Spaces和Enters                     pptText = Shpe.TextFrame.TextRange                     pptText = LCase(替换(pptText,"",vbNullString))                     pptText =替换(替换(替换(pptText,vbCrLf,vbNullString),vbCr,vbNullString),vbLf,vbNullString)                     '确定文本中是否有" iq _"                     如果是InStr(1,pptText," iq _")> 0然后                         '将iq_Array设置为拆分iq的数组                         iq_Array = Split(pptText,",")                         '查找数组的大小                         size = UBound(iq_Array) - LBound(iq_Array)                         '循环播放数组中的每个iq_'                         对于arrayLoop = 0 To size                         '声明将采用iq _'形式" iq_9"或" iq_99"或" iq_999"                         如果iq_Array(arrayLoop)喜欢" iq _#"或者iq_Array(arrayLoop)喜欢" iq _ ##"或者iq_Array(arrayLoop)喜欢" iq _ ###"然后                             '循环用于检查每列                             对于i = 1 to colNumb                                 '为需要它的每张幻灯片复制第一列(角色列)                                 如果i = 1且arrayLoop = 0那么                                     '复制专栏                                     xlWB.Worksheets("工作表Sheet&#34)。列(1).Copy                                     '粘贴新创建的Sheet2中的列                                     xlWB.Worksheets(" Sheet2")。粘贴目标:= xlWB.Worksheets(" Sheet2")。列(1)                                 '如果这不是角色列,那么检查iq _的匹配是否从ppt到xl                                 ElseIf xlWB.Worksheets(" Sheet1")。Cells(1,i)= iq_Array(arrayLoop)和i<> 1然后                                     '用于粘贴Sheet2的下一列,以便最终得到一个表格                                     k = k + 1                                     '与上述相同                                     xlWB.Worksheets("工作表Sheet&#34)。柱(ⅰ).Copy                                     xlWB.Worksheets(" Sheet2")。粘贴目标:= xlWB.Worksheets(" Sheet2")。列(k)                                     '转到下一个数组                                     GoTo Line2                                 万一                             下一个我                         '与上面相同,只有这个是iq _' s形式" iq_45,46,47"而不是" iq_45,iq_46,iq_47"                         ElseIf(iq_Array(0)赞" iq _#"或iq_Array(0)赞" iq _ ##"或iq_Array(0)喜欢" iq _ ###&# 34;)和(IsNumeric(iq_Array(arrayLoop))和Len(iq_Array(arrayLoop))< = 3)然后                             对于i = 1 to colNumb                                 如果i = 1且arrayLoop = 0那么                                     xlWB.Worksheets("工作表Sheet&#34)。列(1).Copy                                     xlWB.Worksheets(" Sheet2")。粘贴目标:= xlWB.Worksheets(" Sheet2")。列(1)                                 ElseIf xlWB.Worksheets(" Sheet1")。Cells(1,i)=(" iq _"& iq_Array(arrayLoop))和i<> 1然后'如果iq in ppt = iq in xl,如果不是第一个单元格则执行                                     k = k + 1                                     xlWB.Worksheets("工作表Sheet&#34)。柱(ⅰ).Copy                                     xlWB.Worksheets(" Sheet2")。粘贴目标:= xlWB.Worksheets(" Sheet2")。列(k)                                     GoTo Line2                                 万一                             下一个我                         万一 线路2:                         下一个arrayLoop                     万一                 万一             万一         下一个Shpe     '计算sheet2上的最后一行和最后一列。又名。找表大小     使用xlWB.Worksheets(" Sheet2")         lRows = .Cells(.Rows.Count,1).End(xlUp).Row         lCols = .Cells(1,.Columns.Count).End(xlToLeft).Column         '如果只有一列,则转到下一张幻灯片         如果lRows = .Cells(1,1).End(xlUp).Row和lCols = .Cells(1,1).End(xlToLeft).Column Then             GoTo Line1         万一             '复制表             .Range(.Cells(1,1),. Cell(lRows,lCols))。复制     结束             '将表粘贴到ppt中             pptSlide.Shapes.PasteSpecial DataType:= ppPasteHTML,Link:= msoFalse             '最近粘贴的形状是幻灯片上的最后一个形状,因此它与幻灯片上的形状数相同             设置myShape = pptSlide.Shapes(pptSlide.Shapes.Count)             '设定位置:             myShape.Left = -200             myShape.Top = 200             ' Clear Sheet2用于下一张幻灯片             xlWB.Worksheets(" Sheet2的")范围(" A1:P10&#34)。清除。 线路1:     下一个pptSlide     xlWB.Worksheets(" Sheet2的&#34)。删除     xlWB.Close     xlApp.Quit     xlApp.DisplayAlerts = True     '结束计时器     SecondsElapsed = Round(Timer - StartTime,2)         MsgBox"此代码在"中成功运行&安培; SecondsElapsed& "秒",vbInformation 结束子

0 个答案:

没有答案