Board logo

標題: [發問] 2003版程式於2007版EXCEL無法執行 [打印本頁]

作者: rouber590324    時間: 2014-9-12 15:04     標題: 指定資料夾多EXCEL彙整功能請教

DEAR ALL 先進
  1.如附一為將指定資料夾下多EXCEL彙整至同一EXCEL並將工作表名稱變更為檔案名稱之功能.
2.請教各位先進.需增加如下 2功能.請問如何修改.煩不另賜教. THANKS  
   新增功能一 : 自動將工作表名稱於各對應工作表之最後一欄儲存格內秀出.(有幾列內容有值秀幾列)
   新增功能二 : 功能一執行後.建立一總表.自動將ALL工作表內容彙整於總表內(標提列僅秀出一個.不需重覆)
3.煩不另賜教    THANKS*10000

附一
Sub yy()
  Dim a As Workbook, f$, fn$, k%
  Dim p$, Sh As Worksheet
  Set a = ThisWorkbook
  p = "C:\AAA\"
  f = Dir(p & "*.CSV")
  Application.ScreenUpdating = False
  Do While f <> ""
    Workbooks.Open p & f
    k = 0
    For Each Sh In Worksheets
      If Not IsEmpty(Sh.UsedRange) Then
      fn = IIf(k = 0, Replace(f, ".xls", ""), Replace(f, ".xls", "_") & k)
      Sh.Copy after:=a.Sheets(a.Sheets.Count)
      ActiveSheet.Name = fn
      k = k + 1
      End If
    Next
    Windows(f).Close True
    f = Dir
  Loop
  Application.ScreenUpdating = True
End Sub
作者: GBKEE    時間: 2014-9-12 16:48

回復 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
複製代碼

作者: rouber590324    時間: 2014-9-12 17:03

DEAR  GBKEE 大大
感謝您.程式確認OK.小弟公司禁止上傳檔案......
待小弟提出申請.以後即可建立範例請教各位先進
非常感謝您之指導.
作者: rouber590324    時間: 2014-9-16 15:12     標題: 2003版程式於2007版EXCEL無法執行

DEAR ALL 大大
  1 如表一程式於2003 EXCEL書寫後於2003 執行均無問題 ,同事經辦電腦為2007版本執行後產生如下BUG -
     1.1執行後出現  "EXCEL無法將工作表插入目的地活業簿,因為它包含的列與欄比來源活頁簿少,若要移動或覆製資料到目的地活頁簿,可以選取資料,然後使用
         "覆製"與"貼上"命另將他插入另一個活頁簿的工作表"
     1.2 程式異常處停於   Sh.Copy after:=a.Sheets(a.Sheets.Count)  此處.
2請教各位先進 表一 如何修改方無此  BUG.
  2.1 煩不吝賜教  THANKS *10000  

表一
Sub yy()
  Dim a As Workbook, f$, fn$, k%
  Dim p$, Sh As Worksheet
  Set a = ThisWorkbook
  p = "C:\AAA\"
  f = Dir(p & "*.CSV")
  Application.ScreenUpdating = False
  Do While f <> ""
    Workbooks.Open p & f
    k = 0
    For Each Sh In Worksheets
      If Not IsEmpty(Sh.UsedRange) Then
      fn = IIf(k = 0, Replace(f, ".xls", ""), Replace(f, ".xls", "_") & k)
      Sh.Copy after:=a.Sheets(a.Sheets.Count)
      ActiveSheet.Name = fn
      k = k + 1
      End If
    Next
    Windows(f).Close True
    f = Dir
  Loop
  Application.ScreenUpdating = True
  
  Sheet14.Select
  Range("A1").Select
End Sub
作者: GBKEE    時間: 2014-9-16 16:19

本帖最後由 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
複製代碼

作者: rouber590324    時間: 2014-9-16 17:11

DEAR  GBKEE大大
1 執行後 停於  a_Sh.Name = fn
  秀出 "編譯錯誤.無法使用至唯讀屬性."
  請問如何除 BUG
  1.1 感謝您之不吝賜教. THANKS *10000
            Set a_Sh = a.Sheets.Add  '新增醫工作表
                    Sh.UsedRange.Copy a_Sh.[a1]   '複製已使用的範圍
                    a_Sh.Name = fn
                k = k + 1
作者: GBKEE    時間: 2014-9-17 14:47

回復 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
複製代碼

作者: rouber590324    時間: 2014-9-17 16:37

Dear sir -
  依您之指導.修改如下  已可正常使用.感謝您   robert 09/18
Sub yy()
  Dim a As Workbook, f$, fn$, k%
  Dim p$, Sh, a_Sh As Worksheet

  Set a = ThisWorkbook
  p = "C:\AAA\"
  f = Dir(p & "*.CSV")
  Application.ScreenUpdating = False
  Do While f <> ""
    Workbooks.Open p & f
    k = 0
    For Each Sh In Worksheets
      If Not IsEmpty(Sh.UsedRange) Then
      fn = IIf(k = 0, Replace(f, ".xls", ""), Replace(f, ".xls", "_") & k)
      Sh.Range("A1:Z500").Select
      Set a_Sh = a.Sheets.Add  '新增一工作表
      a_Sh.Name = fn
      Sh.UsedRange.Copy a_Sh.[a1]   '複製已使用的範圍
            ActiveSheet.Name = fn
      k = k + 1
      End If
    Next
    Windows(f).Close True
    f = Dir
  Loop
  Application.ScreenUpdating = True
  
  Sheet14.Select
  Range("A1").Select
End Sub




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