返回列表 上一主題 發帖

[發問] 2003版程式於2007版EXCEL無法執行

回復 1# rouber590324
新增功能二 : 功能一執行後.建立一總表.自動將ALL工作表內容彙整於總表內(標提列僅秀出一個.不需重覆)

需要你的範例

功能一 :試試看
  1. Option Explicit
  2. Sub yy()
  3.   Dim a As Workbook, p$, f$
  4.   Set a = ThisWorkbook
  5.   p = "C:\AAA\"
  6.   f = Dir(p & "*.CSV")
  7.   Application.ScreenUpdating = False
  8.   Do While f <> ""
  9.     With Workbooks.Open(p & f).Sheets(1)  'CSV 只能有一張工作表
  10.        .Copy after:=a.Sheets(a.Sheets.Count)
  11.         With ActiveSheet.UsedRange
  12.             .Columns(.Columns.Count + 1) = .Parent.Name
  13.         End With
  14.      .Parent.Close True
  15.     End With
  16.     f = Dir
  17.   Loop
  18.   Application.ScreenUpdating = True
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2014-9-17 13:01 編輯
1.1執行後出現  "EXCEL無法將工作表插入目的地活業簿,因為它包含的列與欄比來源活頁簿少,若要移動或覆製資料到目的地活頁簿,可以選取資料,然後使用rouber590324 發表於 2014/9/16 15:12

這是告訴你版本不同的衝突.
那就不要複製整張工作表,複製已使用的範圍到新憎的工作表.也是一樣的
  1. Option Explicit
  2. Sub yy()
  3.     Dim a As Workbook, f$, fn$, k%
  4.     Dim p$, Sh As Worksheet, a_Sh As Workbook
  5.     Set a = ThisWorkbook
  6.     p = "C:\AAA\"
  7.     f = Dir(p & "*.CSV")
  8.     Application.ScreenUpdating = False
  9.     Do While f <> ""
  10.         With Workbooks.Open(p & f)
  11.             k = 0
  12.             For Each Sh In .Worksheets
  13.                 If Not IsEmpty(Sh.UsedRange) Then
  14.                     fn = IIf(k = 0, Replace(f, ".xls", ""), Replace(f, ".xls", "_") & k)
  15.                     'Sh.Copy after:=a.Sheets(a.Sheets.Count)
  16.                     Set a_Sh = a.Sheets.Add  '新增一工作表
  17.                     Sh.UsedRange.Copy a_Sh.[a1]   '複製已使用的範圍
  18.                     a_Sh.Name = fn
  19.                     k = k + 1
  20.                 End If
  21.             Next
  22.             .Close True
  23.         End With
  24.         f = Dir
  25.     Loop
  26.     Application.ScreenUpdating = True
  27.     Sheet14.Select
  28.     Range("A1").Select
  29. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# rouber590324
自己再修改看看
  1. Option Explicit
  2. Sub yy()
  3.     Dim a As Workbook, f$, fn$, k%
  4.     Dim p$, Sh As Worksheet, a_Sh As Workbook
  5.     Set a = ThisWorkbook
  6.     p = "C:\AAA\"
  7.     f = Dir(p & "*.CSV")
  8.     Application.ScreenUpdating = False
  9.     Do While f <> ""
  10.         With Workbooks.Open(p & f)
  11.             k = 0
  12.             For Each Sh In .Worksheets
  13.                 If Not IsEmpty(Sh.UsedRange) Then
  14.                     '********************************************
  15.                     '前面的 f = Dir(p & "*.CSV") '傳回*.CSV的檔案
  16.                     '所以 f 必定是傳回 "*.CSV"的字尾
  17.                     fn = IIf(k = 0, Replace(f, ".xls", ""), Replace(f, ".xls", "_") & k)
  18.                     '固 fn 要將".xls"取代為 "" ,是不會達到你的期望
  19.                     '********************************************
  20.                     'Sh.Copy after:=a.Sheets(a.Sheets.Count)
  21.                     Set a_Sh = a.Sheets.Add  '新增一工作表
  22.                     Sh.UsedRange.Copy a_Sh.[a1]   '複製已使用的範圍
  23.                     '本主題的第2帖的第9行程式碼有註解
  24.                     '09.    With Workbooks.Open(p & f).Sheets(1)  'CSV 只能有一張工作表
  25.                     a_Sh.Name = Sh.Name  '改看看
  26.                     k = k + 1
  27.                 End If
  28.             Next
  29.             .Close True
  30.         End With
  31.         f = Dir
  32.     Loop
  33.     Application.ScreenUpdating = True
  34.     Sheet14.Select
  35.     Range("A1").Select
  36. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題