Board logo

標題: [發問] 文字檔轉入EXCEL-BUG尋問 [打印本頁]

作者: rouber590324    時間: 2019-11-15 15:31     標題: 文字檔轉入EXCEL-BUG尋問

DEAR ALL 大大
1.圖二程式於小弟電腦執行無問題
1.1 文字檔只有800列資料
2.但於同事電腦秀出圖一訊息
   偵錯程式停於
   Sh.Copy after:=A.Sheets(A.Sheets.Count)
3.應是EXCEL版本問題.請問該如何修改  Sh.Copy after:=A.Sheets(A.Sheets.Count)
4.煩不吝賜教  THANKS*10000



圖一
執行階段錯誤
EXCEL無法將工作表插入目的活頁簿.因為它包含的列和欄比來源活頁簿少.若要移動或複製資料至目的地活頁簿.你可以選取資料.然後用[複製]與[貼上]命令將他插入另一個活頁簿的工作表.
圖二
Sub 產生程式分頁()
   Dim A As Workbook, f$, fn$, k%
   Dim p$, Sh As Worksheet
   Set A = ThisWorkbook
   p = "" & Sheet9.Range("B2") & "\"
   f = Dir(p & "" & Sheet9.Range("D2") & "*.TXT")
   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, ".TXT", ""), Replace(f, ".TXT", "_") & 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
   Sheet9.Select
   Range("A1").Select

End Sub
作者: n7822123    時間: 2019-11-16 00:10

本帖最後由 n7822123 於 2019-11-16 00:22 編輯

回復 1# rouber590324

新版活業簿(.xlsx) copy 到 舊版活頁簿(.xls) 就會有此問題
不要整頁 copy 針對有資料的範圍 copy 即可

Sh.Copy after:=A.Sheets(A.Sheets.Count)

改成如下

With A.Sheets.Add(after:=Sheets(A.Sheets.Count))
    .Name = Sh.Name
    Sh.UsedRange.Copy .[A1]
End With

作者: rouber590324    時間: 2019-11-18 08:34

DEAR  n7822123  大大
1.修改如圖一
1.1執行後出現 執行階段錯誤9
      陣列索引出出範圍
1.1.1 然後偵錯停於  With A.Sheets.Add(after:=Sheets(A.Sheets.Count))
2.煩不吝賜教  THANKS     ROBERT11/18



圖一
Sub 產生程式分頁()
   Dim A As Workbook, f$, fn$, k%
   Dim p$, Sh As Worksheet
   Set A = ThisWorkbook
   p = "" & Sheet9.Range("B2") & "\"
   f = Dir(p & "" & Sheet9.Range("D2") & "*.TXT")
   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, ".TXT", ""), Replace(f, ".TXT", "_") & k)
      
       With A.Sheets.Add(after:=Sheets(A.Sheets.Count))
       .Name = Sh.Name
       Sh.UsedRange.Copy .[A1]
       End With
              
       ActiveSheet.Name = fn
       k = k + 1
       End If
     Next
     Windows(f).Close True
     f = Dir
   Loop
   Application.ScreenUpdating = True
   Sheet9.Select
   Range("A1").Select
End Sub
作者: n7822123    時間: 2019-11-19 03:48

回復 3# rouber590324


少打了一個東西,不能省略@@

  With A.Sheets.Add(after:=A.Sheets(A.Sheets.Count))
    .Name = sh.Name
    sh.UsedRange.Copy .[A1]
  End With

作者: rouber590324    時間: 2019-11-19 11:46

DEAR  n7822123  大大
100%符合需求
感謝您之指導 thanks*10000




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