[Xin giúp đỡ] Code tô màu cho nhiều shape

Liên hệ QC

gameonly308

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
197
Được thích
10
Chào các bác. Em có 1 sheet có khoảng 100 cái shape, có tên thứ tự là “Shape1”... đến “Shape100”.
Các bác cho em hỏi có cách nào để dùng hàm For để tô màu nó cho nhanh không ạ. Hiện giờ em đang phải làm tô từng cái rất lâu ạ.
Em cảm ơn!
 
Chào các bác. Em có 1 sheet có khoảng 100 cái shape, có tên thứ tự là “Shape1”... đến “Shape100”.
Các bác cho em hỏi có cách nào để dùng hàm For để tô màu nó cho nhanh không ạ. Hiện giờ em đang phải làm tô từng cái rất lâu ạ.
Em cảm ơn!
Không hiểu bạn muốn tô màu kiểu gì (đừng có nói là dùng 100 Shape để di chuyển qua lại 100 sheet nha) , nếu tô đồng loạt 1 màu thì làm như sau mà chẳng cần code.
Chọn sheet có chứa Shape1”... đến “Shape100”, nhấn Ctrl + G, cửa sổ Go to hiện ra thì nhấn nút Special, cửa sổ Go to Special hiện ra thì đánh dấu chọn mục Objects và nhấn nút OK, nó sẽ chọn tất cả cácShape có trong sheet đó, bây giờ bạn muốn tô màu hay định dạng kiểu gì là tùy ý.
 
Không hiểu bạn muốn tô màu kiểu gì (đừng có nói là dùng 100 Shape để di chuyển qua lại 100 sheet nha) , nếu tô đồng loạt 1 màu thì làm như sau mà chẳng cần code.
Chọn sheet có chứa Shape1”... đến “Shape100”, nhấn Ctrl + G, cửa sổ Go to hiện ra thì nhấn nút Special, cửa sổ Go to Special hiện ra thì đánh dấu chọn mục Objects và nhấn nút OK, nó sẽ chọn tất cả cácShape có trong sheet đó, bây giờ bạn muốn tô màu hay định dạng kiểu gì là tùy ý.
Dạ em cảm ơn bác! Em muốn làm bằng code VBA là vì em dùng Shape để giả lập dòng chảy chất lỏng ạ, nó sẽ auto tô màu theo thời gian mình đặt. Bác em có hướng nào hướng dẫn giúp em với ạ!
 
Chào các bác. Em có 1 sheet có khoảng 100 cái shape, có tên thứ tự là “Shape1”... đến “Shape100”.
Các bác cho em hỏi có cách nào để dùng hàm For để tô màu nó cho nhanh không ạ. Hiện giờ em đang phải làm tô từng cái rất lâu ạ.
Em cảm ơn!
Bạn tô cùng 1 màu hay là tô thế nào.Cho cái file lên đây coi.Bạn dùng vòng lặp bình thường thôi.
For i=1 to 100
tên shape ="Shape" & i
rồi lấy tên shape này muốn làm gì thì làm.
next
 
Bạn tô cùng 1 màu hay là tô thế nào.Cho cái file lên đây coi.Bạn dùng vòng lặp bình thường thôi.
For i=1 to 100
tên shape ="Shape" & i
rồi lấy tên shape này muốn làm gì thì làm.
next
Đây là file em đang test. Code của nó em thấy không ổn, với ít Shape thì viết thế này cũng được.. Nhưng với 100 Shape thì mong các bác tư vấn làm sao cho nó gọn lại giúp em với.
Mã:
Sub Flash1()
    NextTime = Now + TimeValue("00:00:01")
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198)
      End If
    
    
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
      
      
       If ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
      
       If ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
   ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(0, 0, 198)
     End If
      
    If ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
      
       If ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
      
       If ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_7").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_7").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
    
        'If xColor = 0 Then
          '  xColor = .SchemeColor
        'End If
        ' .SchemeColor = Int(Rnd() * 55 + 1)
   ' End With
    ' With ActiveSheet.Shapes("new_x").Fill.ForeColor
     ' If xColor = 0 Then
      '      xColor = .SchemeColor
       ' End If
        ' .SchemeColor = Int(Rnd() * 55 + 1)
    
    
    Application.OnTime NextTime, "Flash1"
End Sub
 

File đính kèm

Đây là file em đang test. Code của nó em thấy không ổn, với ít Shape thì viết thế này cũng được.. Nhưng với 100 Shape thì mong các bác tư vấn làm sao cho nó gọn lại giúp em với.
Mã:
Sub Flash1()
    NextTime = Now + TimeValue("00:00:01")
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198)
      End If
   
   
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
     
     
       If ActiveSheet.Shapes("Shap_2").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
     
       If ActiveSheet.Shapes("Shap_3").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
   ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(0, 0, 198)
     End If
     
    If ActiveSheet.Shapes("Shap_4").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
     
       If ActiveSheet.Shapes("Shap_5").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
     
       If ActiveSheet.Shapes("Shap_6").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_7").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
    ActiveSheet.Shapes("Shap_7").Fill.ForeColor.RGB = RGB(0, 0, 198)
       End If
   
        'If xColor = 0 Then
          '  xColor = .SchemeColor
        'End If
        ' .SchemeColor = Int(Rnd() * 55 + 1)
   ' End With
    ' With ActiveSheet.Shapes("new_x").Fill.ForeColor
     ' If xColor = 0 Then
      '      xColor = .SchemeColor
       ' End If
        ' .SchemeColor = Int(Rnd() * 55 + 1)
   
   
    Application.OnTime NextTime, "Flash1"
End Sub
Bạn thử.
Mã:
Sub Flash1()
    Dim i As Long
    NextTime = Now + TimeValue("00:00:01")
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
       ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198)
    End If
    
For i = 1 To 6
    If ActiveSheet.Shapes("Shap_" & i).Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_" & (i + 1)).Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
       ActiveSheet.Shapes("Shap_" & (i + 1)).Fill.ForeColor.RGB = RGB(0, 0, 198)
    End If
Next i
    Application.OnTime NextTime, "Flash1"
End Sub
 
Bạn thử.
Mã:
Sub Flash1()
    Dim i As Long
    NextTime = Now + TimeValue("00:00:01")
    If ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
       ActiveSheet.Shapes("Shap_1").Fill.ForeColor.RGB = RGB(0, 0, 198)
    End If
   
For i = 1 To 6
    If ActiveSheet.Shapes("Shap_" & i).Fill.ForeColor.RGB = RGB(0, 0, 198) Then
        ActiveSheet.Shapes("Shap_" & (i + 1)).Fill.ForeColor.RGB = RGB(74, 74, 255)
    Else
       ActiveSheet.Shapes("Shap_" & (i + 1)).Fill.ForeColor.RGB = RGB(0, 0, 198)
    End If
Next i
    Application.OnTime NextTime, "Flash1"
End Sub
Em cảm ơn bác!
Bác cho em hỏi thêm 1 chút nữa, em muốn set 1 hàm thời gian là số phút. Ví dụ : 5 phút (thời gian bắt đầu mình đặt trước ạ)
Em muốn là cứ 5 phút nó sẽ tô 1 Shape, bắt đầu từ Shape1 cho đến hết, thì viết thế nào bác?
 
Em cảm ơn bác!
Bác cho em hỏi thêm 1 chút nữa, em muốn set 1 hàm thời gian là số phút. Ví dụ : 5 phút (thời gian bắt đầu mình đặt trước ạ)
Em muốn là cứ 5 phút nó sẽ tô 1 Shape, bắt đầu từ Shape1 cho đến hết, thì viết thế nào bác?
Cái này mình cũng không hay làm lắm.Bạn thử đầu tiên là có 1 đoạn code chạy theo thời gian rồi cho vòng lặp duyệt qua các shape.Rồi kiểm tra xem cái nào chưa tô màu đúng ý mình thì tô màu xong thoát vòng lặp là được.
 
Cái này mình cũng không hay làm lắm.Bạn thử đầu tiên là có 1 đoạn code chạy theo thời gian rồi cho vòng lặp duyệt qua các shape.Rồi kiểm tra xem cái nào chưa tô màu đúng ý mình thì tô màu xong thoát vòng lặp là được.
Có thể gán shape = 1 giá trị được không bác, khi giá trị thời gian > giá trị của shape đó thì shape sẽ đổi màu?
 
Web KT

Bài viết mới nhất

Back
Top Bottom