Board logo

標題: [發問] 如何讓此程式效率提高? [打印本頁]

作者: av8d    時間: 2012-8-23 12:14     標題: 如何讓此程式效率提高?

  1. Private Sub cmdMerge_Click()
  2. Application.ScreenUpdating = False '屏蔽屏幕刷新

  3.     Dim a, b, c As Integer '宣告a,b,c為整數
  4.    
  5.     Dim objsheet As Worksheet
  6.    
  7.     WorkName = Excel.ActiveWorkbook.Name '此檔案名稱
  8.    
  9.     desc = Excel.Workbooks.Add.Name '新檔案視窗編號
  10.    
  11.    
  12.     Application.DisplayAlerts = False  '將警告訊息關閉
  13.    
  14.    
  15.         
  16.     i = 6

  17.     z = 1
  18.    
  19.     While Windows(WorkName).ActiveSheet.Range("b" & i) <> ""
  20.    
  21.         
  22.         Filename = Windows(WorkName).ActiveSheet.Range("b" & i) & "." & Windows(WorkName).ActiveSheet.Range("b3")
  23.         
  24.         Workbooks.Open Filename:=Excel.Workbooks(WorkName).Path & "\" & Filename
  25.         
  26.         
  27.         sheetname = Windows(WorkName).ActiveSheet.Range("b4")
  28.         
  29.         If sheetname <> "" Then
  30.             
  31.             '檢查活頁是否存在
  32.             flag = 0
  33.             For j = 1 To Windows(Filename).Parent.Sheets.Count
  34.                 If Windows(Filename).Parent.Sheets(j).Name = sheetname Then
  35.                    flag = 1
  36.                    Exit For
  37.                 End If
  38.             Next
  39.             
  40.             If flag = 1 Then
  41.                 Windows(Filename).Parent.Sheets(sheetname).Select  '切換活頁
  42.             End If
  43.                
  44.         End If
  45.         Set objsheet = Windows(Filename).ActiveSheet '切換視窗

  46.         '讀取來源檔案的X(列數),Y(行數)
  47.         x = Windows(WorkName).ActiveSheet.Range("b1")
  48.         y = Windows(WorkName).ActiveSheet.Range("b2")
  49.         
  50.         
  51.         a = x '開始列
  52.         b = y '開始欄
  53.       
  54.         Do While True
  55.             kk = ""
  56.             For l = 1 To 10
  57.                 For k = 1 To 30
  58.                     If IsError(objsheet.Cells(x + l, k)) = False Then
  59.                         kk = kk & objsheet.Cells(x + l, k)
  60.                     End If
  61.                 Next
  62.             Next
  63.             If kk = "" Then Exit Do
  64.             x = x + 1
  65.         Loop
  66.         
  67.         Do While True
  68.             kk = ""
  69.             For l = 1 To 10
  70.                 For k = 1 To 30
  71.                     If IsError(objsheet.Cells(k, y + l)) = False Then
  72.                         kk = kk & objsheet.Cells(k, y + l)
  73.                     End If
  74.                 Next
  75.             Next l
  76.             If kk = "" Then Exit Do
  77.             y = y + 1
  78.         Loop
  79.         
  80.         '選取來源範圍
  81.          objsheet.Range(objsheet.Cells(a, b), objsheet.Cells(x, y)).Select
  82.          
  83.          'copy
  84.          Selection.Copy

  85.         '選取目的
  86.         Windows(desc).Activate

  87.         
  88.         
  89.         '如果貼上以後會大於1048576則新增一個活頁
  90.         If (z + x - a + 1) > 65535 Then
  91.             z = 1
  92.             Windows(desc).Parent.Sheets.Add
  93.             Windows(desc).Parent.Sheets(1).Cells(z, 1).Select
  94.         Else
  95.             If UCase(Sheet1.Range("b5").Value) = "Y" Then
  96.                 Windows(desc).ActiveSheet.Cells(z, 1).Value = Windows(WorkName).ActiveSheet.Range("b" & i)
  97.                 Windows(desc).ActiveSheet.Cells(z, 2).Select
  98.             Else
  99.                 Windows(desc).ActiveSheet.Cells(z, 1).Select
  100.             End If
  101.         End If
  102.         
  103.         ActiveSheet.Paste
  104.                
  105.         '貼上欄寬
  106.         Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
  107.         SkipBlanks:=False, Transpose:=False
  108.                         
  109.         z = z + x - a + 1
  110.       
  111.        '將來源檔案關閉
  112.        Windows(Filename).Close
  113.         
  114.         i = i + 1 '讀取下一個檔案名稱
  115.     Wend
  116.    
  117.     Windows(desc).ActiveSheet.Cells(1, 1).Select
  118.    
  119.     '版面設定上下左右0.5
  120.         With ActiveSheet.PageSetup
  121.         .PrintTitleRows = ""
  122.         .PrintTitleColumns = ""
  123.     End With
  124.     ActiveSheet.PageSetup.PrintArea = ""
  125.     With ActiveSheet.PageSetup
  126.         .LeftHeader = ""
  127.         .CenterHeader = ""
  128.         .RightHeader = ""
  129.         .LeftFooter = ""
  130.         .CenterFooter = ""
  131.         .RightFooter = ""
  132.         .LeftMargin = Application.InchesToPoints(0.196850393700787)
  133.         .RightMargin = Application.InchesToPoints(0.196850393700787)
  134.         .TopMargin = Application.InchesToPoints(0.196850393700787)
  135.         .BottomMargin = Application.InchesToPoints(0.196850393700787)
  136.         .HeaderMargin = Application.InchesToPoints(0.511811023622047)
  137.         .FooterMargin = Application.InchesToPoints(0.511811023622047)
  138.         .PrintHeadings = False
  139.         .PrintGridlines = False
  140.         .PrintComments = xlPrintNoComments
  141.         .PrintQuality = 600
  142.         .CenterHorizontally = False
  143.         .CenterVertically = False
  144.         .Orientation = xlPortrait
  145.         .Draft = False
  146.         .PaperSize = xlPaperA4
  147.         .FirstPageNumber = xlAutomatic
  148.         .Order = xlDownThenOver
  149.         .BlackAndWhite = False
  150.         .Zoom = 100
  151.         .PrintErrors = xlPrintErrorsDisplayed
  152.     End With
  153.    
  154.     'A:F遞增排序
  155.     ActiveSheet.Columns("A:F").Select
  156.     Selection.Sort Key1:=ActiveSheet.Range("C2"), Order1:=xlAscending, Header:=xlGuess, _
  157.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
  158.         :=xlStroke, DataOption1:=xlSortNormal
  159.    
  160.     '資料剖析
  161.     ActiveSheet.Columns("D:D").Select
  162.     Selection.Insert Shift:=xlToRight
  163.     ActiveSheet.Columns("C:C").Select
  164.     Selection.TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
  165.         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
  166.         Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
  167.         :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
  168.         
  169.     '整理
  170.     ActiveSheet.Range("C1").Select
  171.     ActiveCell.FormulaR1C1 = "菜名"
  172.     ActiveSheet.Range("D1").Select
  173.     ActiveCell.FormulaR1C1 = "單價"
  174.     ActiveSheet.Columns("D:D").ColumnWidth = 5.63
  175.    
  176.     Application.DisplayAlerts = True  '將警告訊息打開
  177.    
  178. Application.ScreenUpdating = True '取消屏蔽屏幕刷新
  179. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)