Board logo

標題: [發問] 快速copy並值化 [打印本頁]

作者: PJChen    時間: 2018-5-19 00:17     標題: 快速copy並值化

請問以下的程式
它可以快速copy每個工作表
但copy後我要它也同時做數值化的動作,但它只會值化第一個工作表
請問要如何讓它值化每一個工作表?
  1. Sub Qcopy()

  2. Set Wb = Workbooks("進出口請款.2017.xlsx")
  3. Wb.Sheets.Copy
  4. For Each Sh In Wb.Sheets
  5. Sh.Visible = True
  6. Next

  7. For Each Sh In Wb.Sheets
  8. Cells.Select
  9. Selection.Copy
  10. Selection.PasteSpecial xlPasteValues '值化
  11. Next
  12. End Sub
複製代碼

作者: naruto018    時間: 2018-5-19 08:08

回復 1# PJChen

只在第一個工作表貼上值,是因為沒有指定工作表,所以只對當前的工作表作用
要改成下面這樣
  1. For Each Sh In Wb.Sheets
  2. Sh.Cells.Copy
  3. Sh.Cells.PasteSpecial xlPasteValues '值化
  4. Next
複製代碼

作者: ikboy    時間: 2018-5-19 11:06

  1. Sub zz()
  2. For Each s In Sheets
  3.     With s
  4.         .UsedRange = .UsedRange.Value
  5.     End With
  6. Next
  7. End Sub
複製代碼

作者: PJChen    時間: 2018-5-19 14:28

回復 2# naruto018

您好,

但我原先的程式功能是可以將原檔快速的完全複製
程式作修改後,確實能夠將每個工作表都值化,但是它是將原檔值化,而沒有另外copy成新檔.

請問可以如何修改成我要的功能?
作者: PJChen    時間: 2018-5-19 14:35

回復 3# ikboy

您好,

原先的程式功能是可以將原檔快速的完全複製
測試過您修改的程式後,它完全沒有任何改變,我想是因為我原先的程式中有Dim的宣告,稍作修改為以下後,
確實能夠很快速的將每個工作表都值化,但與2樓的程式相同,它只是將原檔值化,而沒有另外copy成新檔.

請問可以如何修改成我要的功能?
  1. Sub Qcopy()
  2. Option Explicit
  3. Dim Wb As Workbook, Sh As Worksheet, Rng As Range
  4. Set Wb = Workbooks("進出口請款.2017.xlsx")
  5. For Each Sh In Wb.Sheets
  6.     With Sh
  7.         .UsedRange = .UsedRange.Value
  8.     End With
  9. Next
  10. End Sub
複製代碼

作者: PJChen    時間: 2018-5-19 18:25

本帖最後由 PJChen 於 2018-5-19 18:27 編輯

回復 2# naruto018

大大好,
改成以下就達成我要的功能了,謝謝!
  1. Sub Qcopy()
  2. Set Wb = Workbooks("進出口請款.2017.xlsx")

  3. Wb.Sheets.Copy
  4. For Each Sh In Sheets
  5. Sh.Cells.Copy
  6. Sh.Cells.PasteSpecial xlPasteValues '值化
  7. Next
  8. End Sub
複製代碼

作者: PJChen    時間: 2018-5-19 18:35

本帖最後由 PJChen 於 2018-5-19 18:38 編輯

回復 3# ikboy
您好,
您的程式可以執行得更快速,我將程式改為以下,利用O1儲存格去指定檔名,但sheet也想用指定的方式寫在Q2
例如:我想讓所有檔名包含"338"的工作表(也就是Q2=338)全部都值化,請問該如何寫這一段程式?
  1. Option Explicit
  2. Dim Wb As Workbook, Sh As Worksheet
  3. Sub Qcopy()
  4. Set Wb = Workbooks(Workbooks("VBA報表指令.xlsm").Worksheets("動作").Range("O1").Value) '儲存格的值為檔案名稱
  5. Wb.Sheets.Copy
  6. For Each Sh In Sheets
  7.     With Sh
  8.         .UsedRange = .UsedRange.Value
  9.     End With
  10. Next
  11. End Sub
複製代碼

作者: PJChen    時間: 2018-5-20 20:12

回復 7# PJChen

請問:
以下程式,檔名指定在O1,O1檔案全部copy後值化。
我想做另一種方式,除了O1指定檔名外,將sheet的名稱指定在Q2,讓sheet名稱可以自由變動,也就是只要sheet名稱含蓋在Q2的名稱內,都可以自動完全複製到新檔案中並值化,請問該如何修改以下程式?
  1. Sub Qcopy()
  2. Set Wb = Workbooks(Workbooks("VBA報表指令.xlsm").Worksheets("動作").Range("O1").Value) '儲存格的值為檔案名稱
  3. Wb.Sheets.Copy
  4. For Each Sh In Sheets
  5.     With Sh
  6.         .UsedRange = .UsedRange.Value '值化
  7.         Application.DisplayAlerts = False '在程序執行過程中使出現的警告框不顯示
  8.     End With
  9. Next
  10. End Sub
複製代碼





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