帖子 15 主題 2 精華 0 積分 23 點名 0 作業系統 windows 7 軟體版本 Office 2010 閱讀權限 10 性別 男 來自 台中 註冊時間 2016-9-22 最後登錄 2021-3-26
13 #
發表於 2016-10-9 17:05
|
只看該作者
[版主管理留言] GBKEE(2016/10/9 19:54): Dim Sh(1 To 2), Rng(1 To 2) As Range, xCol As Integer, R As Integer, i As Integer
回復 11# GBKEE
首先感謝G大花那麼多時間,還這麼快回應,超感動的!
執行後會有"變數未定義"錯誤,程式顯示在 For i = 0 To .HPageBreaks.Count ,當中的i 反白
小弟用自已原本的VBA碼,土炮解決問題如下:
因能力不足從輸出頁(來源頁)改複製範圍,就換從輸入頁(匯出頁) 下手
原本判斷[A16]向下到最後一列再offset一列, 改由從[F16]開始判斷,向下到最後一列再offset到A欄,
因F欄在輸出頁若空白,原本就無公式(無資料),所以到了匯出頁也是無資料,用以上方法便可以有複製資料連續性
很佩服非使用者的G大,能寫出符合實際用途又如此簡約有效率的程式碼!
小弟功力尚淺寫出的程式很粗糙,對G大程式碼暫時只能望而興嘆,慢慢研究啊Sub 匯出地磅資料到新工作表()
shn = ActiveSheet.Name
'防呆1
For e = 2 To Sheets.Count
If shn & "匯出" = Sheets(e).Name Then
Application.DisplayAlerts = False
Sheets(shn & "匯出").Delete
Application.DisplayAlerts = True
Exit For
End If
Next
Application.ScreenUpdating = False
Worksheets.Add after:=Worksheets(Sheets.Count)
Worksheets(Sheets.Count).Name = shn & "匯出"
'抓取欄位 新增
Worksheets(shn).Select
Range("A1:AM15").Select
Range("A1:AM15").Copy
Worksheets(Sheets.Count).Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
'抓取每頁資料內容(使用迴圈)
Worksheets(shn).Select
Dim i As Integer, j As Integer
j = Range("AT51").Value
For i = 16 To 16 + j * 52 Step 52 '應要J-1, 但若只有一頁會有錯,多匯出一頁沒差
Worksheets(shn).Select
Range("a" & i & ":am" & i).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Worksheets(Sheets.Count).Select
If Worksheets(Sheets.Count).Range("F16") = "" Then
Range("A16").Select
ActiveSheet.Paste '先貼一次含公式
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False '再貼一次把公式拿掉
Range("F16").End(xlDown).Offset(1, -5).Clear '刪除A欄資料,以利貼上資料連續
Else
Worksheets(Sheets.Count).Range("F16").End(xlDown).Offset(1, -5).Select
ActiveSheet.Paste '先貼一次含公式
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False '再貼一次把日期變為文字
End If
Next
end sub 複製代碼