- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
本帖最後由 GBKEE 於 2014-2-7 09:21 編輯
回復 34# iceandy6150
萬丈高樓,從地起,你已在打地基了
依你的 [零用金清單-上傳用.rar] 修改一下- Option Explicit '必須置於模組頂端 強制宣告變數
- Private Sub CommandButton1_Click()
- Dim Sh As Worksheet, i As Integer, R As Integer, Rng As Range, xRow As Range
- Application.ScreenUpdating = False
- With Sheets("總表")
- If .UsedRange.Rows.Count = 1 Then '沒有歷史紀錄
- Sheets("Sheet1").UsedRange.Copy '複製(含標頭)
- .Range("A1").PasteSpecial xlPasteValues
- Else
- Sheets("Sheet1").UsedRange.Offset(1).Copy '複製(不含標頭)
- .Range("A" & .UsedRange.Rows.Count).Offset(3).PasteSpecial xlPasteValues
- 'Offset(3) :空2列->第3列貼上
- End If
- End With
- With Sheets("Sheet1")
- .UsedRange.Range("G:G").AdvancedFilter xlFilterCopy, , .Cells(1, .Columns.Count), True
- i = 2
- Do While .Cells(i, .Columns.Count) <> "" '工作表最右欄的儲存格 <>""
- .Range("A:G").AutoFilter 7, .Cells(i, .Columns.Count) 'AutoFilter: 自動篩選 ,第7欄(類別)的準則為 .Cells(i, .Columns.Count)
- Set Rng = Sheets("參照表").Range("A1:A18").Find(.Cells(i, .Columns.Count)).Offset(, 1)
- Set Sh = Sheets(類別表(Rng))
- Sh.Activate
- For Each xRow In .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows '自動篩選範圍列的集合
- If xRow.Row > 1 Then
- R = Application.CountA(Sh.[D7:D19]) '有輸入的資料數
- With Sh
- .[E3,E29] = xRow.Range("B1") '日期加進E3,E29
-
- .[D7].Offset(R).Cells(, 1) = xRow.Range("D1")
- .[D7].Offset(R).Cells(, 5) = xRow.Range("F1")
- .[D7].Offset(R).Cells(, 7) = xRow.Range("E1")
-
- .[D33].Offset(R).Cells(, 1) = xRow.Range("D1")
- .[D33].Offset(R).Cells(, 5) = xRow.Range("F1")
- .[D33].Offset(R).Cells(, 7) = xRow.Range("E1")
- End With
- If Application.CountA(Sh.[D7:D19]) = 13 Then
- Sh.Copy , Sh
- Set Sh = ActiveSheet
- Sh.[D7:J19,D33:J45] = ""
- 'Sh.[D33:J45] = ""
- End If
- End If
- Next
- i = i + 1
- Loop
- .AutoFilterMode = False '**** 取消自動篩選模式,資料全部顯示下面的清除才有效果*****
- ' .UsedRange.Offset(1) = "'" 'UsedRange: 工作表的已使用範圍
- '.Cells(1, .Columns.Count).EntireColumn = "" 'EntireColumn:整欄
- '.Cells(1, .Columns.Count).CurrentRegion = "" 'CurrentRegion: 有資料的延伸範圍
- ' .Activate
- End With
- Application.ScreenUpdating = True
- End Sub
- Function 類別表(類別 As Range) As String '自訂函數: 尋找類別的工作表
- Dim 表 As String, Sh As Worksheet
- For Each Sh In Sheets 'Sheets: 工作表的集合
- If InStr(Sh.Name, 類別) = 1 And Application.CountA(Sh.[D7:D19]) = 13 Then '類別的工作表[D7:D19]有輸入的資料數
- 表 = Sh.Name
- ElseIf InStr(Sh.Name, 類別) = 1 And Application.CountA(Sh.[D7:D19]) < 13 Then
- 類別表 = Sh.Name
- Exit For
- End If
- Next
- If 類別表 = "" And 表 <> "" Then
- Sheets(表).Copy , Sheets(表)
- ActiveSheet.[C2] = 類別.Offset(, 2)
- 類別表 = ActiveSheet.Name
- ElseIf 類別表 = "" And 表 = "" Then
- '*** 找不到類別的工作表 複製 "表格" 的範本
- Sheets("表格範本").Copy Sheets(1)
- ActiveSheet.Name = 類別
- ActiveSheet.[C2] = 類別.Offset(, 1)
- 類別表 = 類別
- End If
- End Function
複製代碼 |
|