返回列表 上一主題 發帖

[發問] VBA複製儲存格顏色

[發問] VBA複製儲存格顏色

各位好,有個問題麻煩各位幫忙解答
目前兩個EXCEL檔,一個用來作出勤登記,一個出勤統計用
統計的部分是依照所需要的日期區間做抓取資料,但因為登記的部分多增加了儲存格顏色來備註,
希望抓到統計那邊時儲存格顏色也能一併過去
  1. Sub Main()
  2.     Call 日期區間(S, E)
  3.     Call 加補休(S, E)
  4.     Call 加班費(S, E)
  5.    
  6. End Sub

  7. Sub 日期區間(S, E)
  8.    
  9.     S = CDate(Sheets("設定頁").Range("b8"))
  10.     E = CDate(Sheets("設定頁").Range("c8"))
  11.   
  12. End Sub


  13. Sub 加補休(S, E)

  14.     'Call 建立新工作表(S, E)

  15.     i = 3
  16.     x = 2
  17.    
  18.     If Sheets(1).Cells(2, 1) = "" Then
  19.     x = 2
  20.     Else
  21.     x = ActiveSheet.UsedRange.Rows.Count + 1
  22.    ' MsgBox x
  23.     End If
  24.          
  25.     SNAME = Sheets("設定頁").Range("B2") '活頁簿名稱

  26. Do While Workbooks(SNAME).Sheets("補休").Cells(i, 1) <> ""
  27.     'MsgBox S
  28.     If (Workbooks(SNAME).Sheets("補休").Cells(i, 4) >= CDate(S) And Workbooks(SNAME).Sheets("補休").Cells(i, 4) <= CDate(E)) = True Then
  29.          '建立新工作表
  30.          
  31.          Sheets(1).Cells(x, 1) = Workbooks(SNAME).Sheets("補休").Cells(i, 1)
  32.          Sheets(1).Cells(x, 2) = Workbooks(SNAME).Sheets("補休").Cells(i, 2)
  33.          Sheets(1).Cells(x, 3) = Workbooks(SNAME).Sheets("補休").Cells(i, 12)
  34.          Sheets(1).Cells(x, 4) = CDate(Workbooks(SNAME).Sheets("補休").Cells(i, 4))
  35.          Sheets(1).Cells(x, 8) = Workbooks(SNAME).Sheets("補休").Cells(i, 5)

  36.          x = x + 1
  37.     End If
  38. i = i + 1
  39. Loop

  40. End Sub

  41. Sub 加班費(S, E)

  42.     'Call 建立新工作表(S, E)

  43.     i = 3
  44.     x = 2
  45.    
  46.     If Sheets(1).Cells(2, 1) = "" Then
  47.     x = 2
  48.     Else
  49.     x = ActiveSheet.UsedRange.Rows.Count + 1
  50.     'MsgBox x
  51.     End If
  52.          
  53.     SNAME = Sheets("設定頁").Range("B2") '活頁簿名稱

  54. Do While Workbooks(SNAME).Sheets("加班及請假").Cells(i, 1) <> ""
  55.      If Workbooks(SNAME).Sheets("加班及請假").Cells(i, 3) <> "" And Workbooks(SNAME).Sheets("加班及請假").Cells(i, 4) <> "" = True Then
  56.             
  57.          Sheets(1).Cells(x, 1) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 2)
  58.          Sheets(1).Cells(x, 2) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 3)
  59.          Sheets(1).Cells(x, 3) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 1)
  60.          Sheets(1).Cells(x, 4) = CDate(Workbooks(SNAME).Sheets("加班及請假").Cells(i, 4))
  61.          Sheets(1).Cells(x, 5) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 5)
  62.          Sheets(1).Cells(x, 6) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 6)
  63.          Sheets(1).Cells(x, 7) = Workbooks(SNAME).Sheets("加班及請假").Cells(i, 7)

  64.          x = x + 1
  65.          End If
  66.          i = i + 1
  67. Loop


  68. End Sub
複製代碼

本帖最後由 n7822123 於 2020-5-20 00:46 編輯

回復 1# 蘿蔔泥

沒檔案測試,我講方法,請自己改

用"Copy" 取代 "="  的方式,可以把儲存格格式一併Copy過去


Sheets(1).Cells(x, 1) = Workbooks(SNAME).Sheets("補休").Cells(i, 1)

改成

Workbooks(SNAME).Sheets("補休").Cells(i, 1).Copy Sheets(1).Cells(x, 1)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 2# n7822123


  好,謝謝

TOP

回復 2# n7822123


  你好,請問我做更改會在日期那行會出現錯誤,該怎更改呢?
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 2).Copy Sheets(1).Cells(x, 1)
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 3).Copy Sheets(1).Cells(x, 2)
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 1).Copy Sheets(1).Cells(x, 3)
         CDate(Workbooks(SNAME).Sheets("加班及請假").Cells(i, 4)).copy Sheets(1).Cells(x, 4)
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 5).Copy Sheets(1).Cells(x, 5)
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 6).Copy Sheets(1).Cells(x, 6)
         Workbooks(SNAME).Sheets("加班及請假").Cells(i, 7).Copy Sheets(1).Cells(x, 7)

TOP

本帖最後由 n7822123 於 2020-5-28 02:17 編輯

回復 4# 蘿蔔泥


看看是不是你要的

Workbooks(SNAME).Sheets("加班及請假").Cells(i, 4).copy Sheets(1).Cells(x, 4)  
Sheets(1).Cells(x, 4).NumberFormatLocal = "hh:mm:ss AM/PM"



CDate(數值) ---------  O
CDate(物件) ---------  X


儲存格物件.Copy ------- O
值.Copy   ----------------X


儲存格是個物件
Copy 是儲存格物件的 方法
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 修行要繫緣修心,藉事練心,隨處養心。
返回列表 上一主題