Hỏi về thuộc tính BackColor của Command Button (Control ToolBox)

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Trong 1 sheet có khá nhiều Command Button (Cmd), tôi dùng vòng lập duyệt qua các Cmd này và thay đổi 1 số thuộc tính của nó!
Ví dụ: tôi dùng code này để thay đổi độ dài, rộng:
PHP:
Sub ChangeObj()
  Dim Obj As OLEObject
  For Each Obj In ActiveSheet.OLEObjects
   Obj.Height = 50
   Obj.Width = 100
  Next
End Sub
Code chạy không có vấn đề! Nhưng tôi không tài nào tìm được code gì nói về việc thay đổi thuộc tính BackColor của Cmd cả
Mong các bạn chỉ giúp!
 

File đính kèm

Ah... tôi tìm được rồi. Nó nằm tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=5818
Bây giờ tôi lại có 1 thắc mắc khác: Với 3 Cmd trong file tôi muốn tô nó thành 3 màu khác nhau (dùng vòng lập nha) thì làm cách nào?
(vì file thực tế có nhiều Cmd nên không thể IF được)
 
Upvote 0
Điều khiển dạng Control ToolBox (dạng ActiveX) không thể thay đổi được thuộc tính BackColor hay Font được đâu bác Tuấn ạ. Thực hiện bằng tay cũng không được.
 
Upvote 0
Điều khiển dạng Control ToolBox (dạng ActiveX) không thể thay đổi được thuộc tính BackColor hay Font được đâu bác Tuấn ạ. Thực hiện bằng tay cũng không được.
Điều khiển được mà sư phụ!
Sư phụ xem link ở bài #2 bạn TuanVNUNI có hướng dẩn đấy!
Bây giờ tô màu thì tô được rồi, nhưng vấn đề rắc rồi bây giờ là làm sao tô màu khác nhau cho các Cmd
 
Upvote 0
Bây giờ tôi lại có 1 thắc mắc khác: Với 3 Cmd trong file tôi muốn tô nó thành 3 màu khác nhau (dùng vòng lập nha) thì làm cách nào?
(vì file thực tế có nhiều Cmd nên không thể IF được)
Tôi chưa hiểu ý của bạn là như nào? 3 màu khác nhau là 3 màu ngẫu nhiên màu nào cũng được hay 3 màu được chỉ ra?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi chưa hiểu ý của bạn là như nào? 3 màu khác nhau là 3 màu ngẫu nhiên màu nào cũng được hay 3 màu được chỉ ra?
Gần đúng với ý tôi rồi đấy! Cảm ơn bạn!
Bạn xem file của tôi có lẽ hiểu ý tôi liền (tôi cần 56 màu cho 56 Cmd... theo thứ tự từ 1 đến 56 của bảng mã màu)
 

File đính kèm

Upvote 0
Bạn dùng vòng lặp để kiểm tra theo tên của nó. ví dụ: 3 nút đó tên là cmd1, cmd2,cmd3

dim ten as string
dim ctr as control
for each ctr in controls
ten=ctr.Name
select case ten
Case is:= "cmd1"
.....Định dạng 1
Case is:= "cmd2"
.....Định dạng 2
Case is:= "cmd3"
.....Định dạng 3
case other
'Do nothing
end select
next

(Các lệnh này mình viết trực tiếp rất có thể có sai sót)
Còn việc đổi màu không phải là cả nút mà chỉ label của nó thôi. Tình cờ hôm làm thử đổi màu ô nhập liệu theo bài của manhhung12 mình thấy vậy
 
Upvote 0
Bạn dùng vòng lặp để kiểm tra theo tên của nó. ví dụ: 3 nút đó tên là cmd1, cmd2,cmd3

dim ten as string
dim ctr as control
for each ctr in controls
ten=ctr.Name
select case ten
Case is:= "cmd1"
.....Định dạng 1
Case is:= "cmd2"
.....Định dạng 2
Case is:= "cmd3"
.....Định dạng 3
case other
'Do nothing
end select
next

(Các lệnh này mình viết trực tiếp rất có thể có sai sót)
Còn việc đổi màu không phải là cả nút mà chỉ label của nó thôi. Tình cờ hôm làm thử đổi màu ô nhập liệu theo bài của manhhung12 mình thấy vậy
Anh ơi! Tất nhiên em biết vụ này... nhưng mà làm vậy "tê" quá (đến 56 trường hợp, em Select Case 1 hồi chắc em xỉu luôn)
Vì vậy mà em muốn 1 vòng lập kiểu chạy từ 1 đến 56 (hoặc số gì đó) rồi tô màu theo số này 1 cách tuần tự từ Object đầu đến Object cuối
Anh xem bài số #5 và #6 tô màu mà đâu cần Select Case gì đâu... Có điều theo cách làm của em thì em chỉ nhớ được tên của 8 màu... Mấy màu còn lại thì thua... hỏng biết nó tên gì
 
Upvote 0
Gần đúng với ý tôi rồi đấy! Cảm ơn bạn!
Bạn xem file của tôi có lẽ hiểu ý tôi liền (tôi cần 56 màu cho 56 Cmd... theo thứ tự từ 1 đến 56 của bảng mã màu)
Tức là 56 cái nút đó bạn muốn nó sẽ có mỗi nút 1 màu cố định(lần nào chạy cũng là màu đó) miễn là khác nhau à? Vậy thì như file của bạn gửi là ok rồi. Còn nếu muốn màu ngẫu nhiên thì làm như file của mình, thay đổi chút xíu chỗ lấy màu ngẫu nhiên là ok thôi.
 
Upvote 0
Tức là 56 cái nút đó bạn muốn nó sẽ có mỗi nút 1 màu cố định(lần nào chạy cũng là màu đó) miễn là khác nhau à?
Đúng vậy! 56 màu khác nhau cho các cmd (các màu cho trước cố định)
Vậy thì như file của bạn gửi là ok rồi. Còn nếu muốn màu ngẫu nhiên thì làm như file của mình, thay đổi chút xíu chỗ lấy màu ngẫu nhiên là ok thôi.
File đó đúng là OK thật, nhưng như tôi đã nói ở trên, tôi chỉ nhớ tên có 8 mã màu... Vậy nếu làm theo cách của tôi thì các mã màu còn lại mang tên gì? (tìm trên Google cũng có mà thế vào nó bị lổi)
Bạn làm giúp tôi vụ này luôn đi... Cảm ơn trước
 
Upvote 0
Tức là 56 cái nút đó bạn muốn nó sẽ có mỗi nút 1 màu cố định(lần nào chạy cũng là màu đó) miễn là khác nhau à? Vậy thì như file của bạn gửi là ok rồi. Còn nếu muốn màu ngẫu nhiên thì làm như file của mình, thay đổi chút xíu chỗ lấy màu ngẫu nhiên là ok thôi.
Cần thêm một dòng lệnh để xác định chính xác đó là Command Button, chứ không phải là CheckBox; TextBox; OptionButton; ListBox; ComboBox; ToggleButton . . .


File đó đúng là OK thật, nhưng như tôi đã nói ở trên, tôi chỉ nhớ tên có 8 mã màu... Vậy nếu làm theo cách của tôi thì các mã màu còn lại mang tên gì? (tìm trên Google cũng có mà thế vào nó bị lổi)
Bạn làm giúp tôi vụ này luôn đi... Cảm ơn trước
Bác có thể dùng theo mã màu hệ RGB, ở đó có thể tùy ý sử dụng các con số từ 0->255

Xem ví dụ của Bill:

BackColor, BackStyle, BorderColor, BorderStyle, ForeColor, SpecialEffect Properties Example@import url(/Office.css);
PHP:
Private Sub UserForm_Initialize()
'Initialize each TextBox with a border style or special effect,
'and foreground and background colors

'TextBox1 initially uses a borderstyle
TextBox1.Text = "BorderStyle-Single"
TextBox1.BorderStyle = fmBorderStyleSingle
TextBox1.BorderColor = RGB(255, 128, 128)   
'Color - Salmon
TextBox1.ForeColor = RGB(255, 255, 0)       
'Color - Yellow
TextBox1.BackColor = RGB(0, 128, 64)        
'Color - Green #2

'TextBoxes 2 through 6 initially use special effects
TextBox2.Text = "Flat"
TextBox2.SpecialEffect = fmSpecialEffectFlat
TextBox2.ForeColor = RGB(64, 0, 0)          
'Color - Brown
TextBox2.BackColor = RGB(0, 0, 255)         
'Color - Blue

'Ensure the background style for TextBox2 is initially
'opaque.
TextBox2.BackStyle = fmBackStyleOpaque

TextBox3.Text = "Etched"
TextBox3.SpecialEffect = fmSpecialEffectEtched
TextBox3.ForeColor = RGB(128, 0, 255)       
'Color - Purple
TextBox3.BackColor = RGB(0, 255, 255)       
'Color - Cyan

'Define BorderColor for later use (when borderstyle=fmBorderStyleSingle)
TextBox3.BorderColor = RGB(0, 0, 0)         
'Color - Black

TextBox4.Text = "Bump"
TextBox4.SpecialEffect = fmSpecialEffectBump
TextBox4.ForeColor = RGB(255, 0, 255)       
'Color - Magenta
TextBox4.BackColor = RGB(0, 0, 100)         
'Color - Navy blue

TextBox5.Text = "Raised"
TextBox5.SpecialEffect = fmSpecialEffectRaised
TextBox5.ForeColor = RGB(255, 0, 0)         
'Color - Red
TextBox5.BackColor = RGB(128, 128, 128)     
'Color - Gray

TextBox6.Text = "Sunken"
TextBox6.SpecialEffect = fmSpecialEffectSunken
TextBox6.ForeColor = RGB(0, 64, 0)          
'Color - Olive
TextBox6.BackColor = RGB(0, 255, 0)         
'Color - Green #1

ToggleButton1.Caption = "Swap styles"
ToggleButton2.Caption = "Transparent/Opaque " _
    & "background"
End Sub

Private Sub ToggleButton1_Click()

'Swap borders between TextBox1 and TextBox3
If ToggleButton1.Value = True Then
    'Change TextBox1 from BorderStyle to Etched
    TextBox1.Text = "Etched"
    TextBox1.SpecialEffect = fmSpecialEffectEtched
    
    'Change TextBox3 from Etched to BorderStyle
    TextBox3.Text = "BorderStyle-Single"
    TextBox3.BorderStyle = fmBorderStyleSingle
Else
    'Change TextBox1 back to BorderStyle
    TextBox1.Text = "BorderStyle-Single"
    TextBox1.BorderStyle = fmBorderStyleSingle
    
    'Change TextBox3 back to Etched
    TextBox3.Text = "Etched"
    TextBox3.SpecialEffect = fmSpecialEffectEtched
End If
End SubPrivate Sub ToggleButton2_Click()
'Set background to Opaque or Transparent
If ToggleButton2.Value = True Then
    'Change TextBox2 to a transparent background
    TextBox2.BackStyle = fmBackStyleTransparent
Else
    'Change TextBox2 back to opaque background
    TextBox2.BackStyle = fmBackStyleOpaque
End If
End Sub
Thân!
 
Upvote 0
Tìm không ra mã màu, nhưng có cách này, ndu coi thử:
 

File đính kèm

Upvote 0
Tìm không ra mã màu, nhưng có cách này, ndu coi thử:
Màu thì tô được rồi, nhưng mà em muốn tô giống như đoạn code dưới đây:
PHP:
Sub Test()
 For i = 1 To 56
   Cells(i,1).Interior.ColorIndex = i
 Next
End Sub
Em muốn 56 màu giống vậy! Chẳng lẽ không có cách sao sư phụ ơi
 
Upvote 0
Điều khiển được mà sư phụ!
Sư phụ xem link ở bài #2 bạn TuanVNUNI có hướng dẩn đấy!
Bây giờ tô màu thì tô được rồi, nhưng vấn đề rắc rồi bây giờ là làm sao tô màu khác nhau cho các Cmd

Đúng là cứ mải mê với vbRed, vbBlue,... mà quên thuộc tính BackColor được định nghĩa trong Properties.
 
Upvote 0
Đúng là cứ mải mê với vbRed, vbBlue,... mà quên thuộc tính BackColor được định nghĩa trong Properties.

Là không thể nhìn thấy bác ạ. Thực tế, về mặt trực quan một số các properties của đối tượng OleObject không có trong Control mà người dùng đang can thiệp nên phần lớn mọi người không dùng được là điều dễ hiểu. OleObject chỉ mang những đặc trưng chung của một control chuẩn trong VBA. Việc khai thác đối tượng OleObject nói riêng và các controls nói chung phải hiểu tốt về lập trình COM trong Windows.

Tại sao các đối tượng (trong VB) lại có một property là "Object" ?
Bản chất Object là gì?
 
Lần chỉnh sửa cuối:
Upvote 0
À, mình hiểu cái 56 màu của NDU rồi +-+-+-+, bạn xem như file này đã đáp ứng được yêu cầu của bạn chưa nhé.
 

File đính kèm

Upvote 0
Vậy cái chính là ActiveWorkbook.Colors(iColor), và không cần mod 56, iCcolor = iColor+1 luôn
 
Upvote 0
Vậy cái chính là ActiveWorkbook.Colors(iColor), và không cần mod 56, iCcolor = iColor+1 luôn
Đấy là tôi phòng xa, vì câu lệnh này sẽ gây ra lỗi
Mã:
ActiveWorkbook.Colors(57)
Con số 56 ở đây là 56 trong bảng màu cơ bàn của excel Tools/Option -> Tab Color, ta có thể định nghĩa lại từng màu trong bảng màu cơ bản này.
 
Upvote 0
À, mình hiểu cái 56 màu của NDU rồi , bạn xem như file này đã đáp ứng được yêu cầu của bạn chưa nhé.
Rất chính xác và đúng với ý tôi cần! Cảm ơn cao thủ đại ca... Hiiiii...
Giờ... được VOI đòi... HAI BÀ TRƯNG nhé:
Số là thế này: trong bảng tính, các bạn bấm nút Fill Color trên thanh Toolbar, các bạn sẽ nhìn thấy 1 bảng màu gồm 40 màu... Vậy làm sao ta có thể lấy đựoc thứ tự màu giống y chang bảng màu đó nhỉ? (tính theo thứ tự từ trên xuống, từ trái sang phải thì màu đen nằm đầu tiên, rồi đến màu nâu.. màu đỏ... vân... vân...)
Các bạn hãy xem file thí nghiệm đính kèm, tôi tìm hoài mà vẩn không sao hiểu đựoc quy luật về cách sắp xếp màu trong đó
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tạm thời tôi làm theo kiểu "củ chuối" này (nhưng tuyệt đối chính xác với 56 màu trong bảng màu)
Các bạn xem file và cải tiến giúp (nếu có cách khác hay hơn)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom