Cách liên kết Text Box với Cell (1 người xem)

  • Thread starter Thread starter pro8x
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

pro8x

Thành viên hoạt động
Tham gia
3/11/11
Bài viết
142
Được thích
24
Nhờ mọi người giúp mình cái này với. Minhf có 4 Text Box, trong mỗi text box là 1 số khác nhau(1,2,3,4). Làm thế nào để khi mình nhập các số này vào 1 Cell quy định thì textBox có số tương ứng có màu đỏ. Cụ thể mọi người xem ảnh nhe
 

File đính kèm

Nhờ mọi người giúp mình cái này với. Minhf có 4 Text Box, trong mỗi text box là 1 số khác nhau(1,2,3,4). Làm thế nào để khi mình nhập các số này vào 1 Cell quy định thì textBox có số tương ứng có màu đỏ. Cụ thể mọi người xem ảnh nhe
Có lẽ vấn đề của bạn phải giải quyết bằng VBA.
Nếu sử dụng chức năng sẵn có của Excel thì mình làm như sau:
1. Nhập các số 1, 2, 3, 4 vào một vùng thay cho 4 Textbox (vùng F4:F7 chẳng hạn).
2. Chọn vùng này và thiết lập Conditional Formatting với công thức:
Mã:
=INDEX($B:$B,MATCH(9^99,$B:$B,1))=$F4
Bạn tham khảo trong file nhé.
 

File đính kèm

Nhờ mọi người giúp mình cái này với. Minhf có 4 Text Box, trong mỗi text box là 1 số khác nhau(1,2,3,4). Làm thế nào để khi mình nhập các số này vào 1 Cell quy định thì textBox có số tương ứng có màu đỏ. Cụ thể mọi người xem ảnh nhe
Làm như thế này có đúng ý bạn không, nhập số vào B4? (Cái này dùng VBA nên nếu không biết VBA thì bạn khó áp dụng những cái tương tự nha)
 

File đính kèm

Nhờ mọi người giúp mình cái này với. Minhf có 4 Text Box, trong mỗi text box là 1 số khác nhau(1,2,3,4). Làm thế nào để khi mình nhập các số này vào 1 Cell quy định thì textBox có số tương ứng có màu đỏ. Cụ thể mọi người xem ảnh nhe

Chợt nghĩ ra trò này thấy cũng hay hay, post lên cho các bạn tham khảo
Nói chung là tô màu cho shape theo điều kiện mà không cần dùng đến code
Ẹc... Ẹc...

Untitled.jpg
 

File đính kèm

rất cảm ơn mọi người đã giúp mình.
Mình có vấn đề là Text Box của mình có 10 cái tương ứng các số tù 1->10.Vùng nhập dữ liệu là B4:B10. Khi mình nhập các số bất kì từ 1->10 vào vùng này thì các Texbox tương ứng sẽ được tô màu. Mong mọi người giúp đỡ.
PS:mình dã xem và sửa theo cách của mọi người nhưng không khả quan lắm
 
rất cảm ơn mọi người đã giúp mình.
Mình có vấn đề là Text Box của mình có 10 cái tương ứng các số tù 1->10.Vùng nhập dữ liệu là B4:B10. Khi mình nhập các số bất kì từ 1->10 vào vùng này thì các Texbox tương ứng sẽ được tô màu. Mong mọi người giúp đỡ.
PS:mình dã xem và sửa theo cách của mọi người nhưng không khả quan lắm
Theo tôi bạn muốn gì thì cũng phải có dữ liệu thực, tại Topic này đã có khá nhiều cách: Cf trực tiếp, Cf giấn tiếp qua chụp ảnh, VBA. Cái nào cũng có thể áp dũng nhưng vấn đề là bạn không biết cách vận dụng mà thôi.
Vậy đưa dữ liệu thực lên mọi người sẽ giúp bạn!
 
Theo tôi bạn muốn gì thì cũng phải có dữ liệu thực, tại Topic này đã có khá nhiều cách: Cf trực tiếp, Cf giấn tiếp qua chụp ảnh, VBA. Cái nào cũng có thể áp dũng nhưng vấn đề là bạn không biết cách vận dụng mà thôi.
Vậy đưa dữ liệu thực lên mọi người sẽ giúp bạn!
cảm ơn bạn đã nhắc nhở.Mình up file dữ liệu thực mong mọi người giúp đỡ.
Cụ thẻ như sau: Sản phẩm được đánh dấu các vị trí hay sảy ra lỗi, hàng ngày sảy ra lỗi ở vị trí nào sẽ nhập số của vị trí đấy vào cột "Vị trí lỗi" (Vị trí Lỗi này hàng ngày là không giống nhau)
 

File đính kèm

cảm ơn bạn đã nhắc nhở.Mình up file dữ liệu thực mong mọi người giúp đỡ.
Cụ thẻ như sau: Sản phẩm được đánh dấu các vị trí hay sảy ra lỗi, hàng ngày sảy ra lỗi ở vị trí nào sẽ nhập số của vị trí đấy vào cột "Vị trí lỗi" (Vị trí Lỗi này hàng ngày là không giống nhau)

Hỏi lại: Vị trí lỗi chỉ nhập tại B4 hay còn nhập ở đâu nữa? Nếu còn nhập chổ khác (B5 chẳng hạn) thì sao bạn không ví dụ cho tổng quát chút?
 
cảm ơn bạn đã nhắc nhở.Mình up file dữ liệu thực mong mọi người giúp đỡ.
Cụ thẻ như sau: Sản phẩm được đánh dấu các vị trí hay sảy ra lỗi, hàng ngày sảy ra lỗi ở vị trí nào sẽ nhập số của vị trí đấy vào cột "Vị trí lỗi" (Vị trí Lỗi này hàng ngày là không giống nhau)
Thôi thì mình cứ "Làm liều" trúng thì tốt mà không trúng thì...làm lại nhé!
 

File đính kèm

File đính kèm

Hi.chào cả nhà.Trước e có nhờ các thầy về vấn đề tô màu này.Hiện nay em có áp dụng vào 1 file mới, file có nhiều ảnh dung lượng tầm 6mb, em có áp dụng PP của thầy ndu96081631 chỉ dùng condition, nhưng áp dụng cách này file chạy rất chậm.Vậy mong các thầy xem có cách khác k ah.
P/S: File mới tương tự file e đã up nhưng khác là: Có 2 ĐK tô mầu. Nếu texbox trùng với giá trị từ ô B4:B13 thì tô chữ đậm màu đỏ, No Fill. Nếu texbox trùng với giá trị từ C4:C13 thì chữ nghiêng màu xanh,No fill. Em có sủa code theo VD của thầy dhn46 nhưng không được.Vậy mong các thầy giúp
 
Vấn đề tô màu cho chữ trong texbox theo điều kiện

Chào các thầy, e có 1 file gồm khoảng 60 sheets, mỗi sheet đều có hình ảnh. (file tầm 6mb).
trên hình ảnh được đánh dấu vị trí bằng textbox có số, e muuón nhờ các thầy viết cho e đoạn code tô màu theo điều kiện: khi nhập giá trị từ B4:B13 thì texbox có số tương ứng chữ màu đỏ, Còn khi nhập vào C4:C13 thì chữ trong texbox tương ứng màu xanh ( giá trị giũa b cà C là k giống nhau).Mong các thầy giúp, file đính kèm là e ví dụ 1 sheet
P/S: e có làm băng condition nhưng file nó nặng và chậm quá
 

File đính kèm

Mọi người chưa xong thì bạn giục, mà làm giúp bạn phải convert rồi dọn dẹp lỉnh kỉnh quá

Bạn đổi tên Oval từ 1 đến 10 thành Sh01--Sh10 (Đúng số trong ô) rồi dùng Code sau:


Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, Cl As Range
If Not Intersect(Target, [B4:C13]) Is Nothing Then
  If Target.Cells.Count <> 1 Then Exit Sub
     If Evaluate("=COUNTIF($B$4:$C$13," & Target & ")") > 1 Then
        Target = ""
            Target.Select
                Exit Sub
                    End If
                        For i = 1 To 10
                            Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues)
                                Shapes("Sh" & Format(i, "00")).Select
                                    With Selection
                                        If Cl Is Nothing Then
                                            .ShapeRange.Fill.Visible = msoFalse
                                                .Font.ColorIndex = 1
                                            ElseIf Cl.Column = 2 Then
                                     .ShapeRange.Fill.ForeColor.SchemeColor = 13
                                .ShapeRange.Fill.Visible = msoTrue
                            .ShapeRange.Fill.Solid
                      .Font.ColorIndex = 3
                    ElseIf Cl.Column = 3 Then
                .ShapeRange.Fill.ForeColor.SchemeColor = 43
            .ShapeRange.Fill.Visible = msoTrue
        .ShapeRange.Fill.Solid
    .Font.ColorIndex = 5
  End If
End With
Next
Target.Select
End If
End Sub



Code này đã kiểm tra nếu bạn nhập trùng số sẽ xoá.
Code này bạn bỏ vào Thisworkbook (SheetChange và thay Activesheet=Sh) thì nó chạy cả 60 sheet của bạn như vậy
 

File đính kèm

Lần chỉnh sửa cuối:
Mọi người chưa xong thì bạn giục, mà làm giúp bạn phải convert rồi dọn dẹp lỉnh kỉnh quá

Bạn đổi tên Oval từ 1 đến 10 thành Sh01--Sh10 (Đúng số trong ô) rồi dùng Code sau:


Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, Cl As Range
If Not Intersect(Target, [B4:C13]) Is Nothing Then
  If Target.Cells.Count <> 1 Then Exit Sub
     If Evaluate("=COUNTIF($B$4:$C$13," & Target & ")") > 1 Then
        Target = ""
            Target.Select
                Exit Sub
                    End If
                        For i = 1 To 10
                            Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues)
                                Shapes("Sh" & Format(i, "00")).Select
                                    With Selection
                                        If Cl Is Nothing Then
                                            .ShapeRange.Fill.Visible = msoFalse
                                                .Font.ColorIndex = 1
                                            ElseIf Cl.Column = 2 Then
                                     .ShapeRange.Fill.ForeColor.SchemeColor = 13
                                .ShapeRange.Fill.Visible = msoTrue
                            .ShapeRange.Fill.Solid
                      .Font.ColorIndex = 3
                    ElseIf Cl.Column = 3 Then
                .ShapeRange.Fill.ForeColor.SchemeColor = 43
            .ShapeRange.Fill.Visible = msoTrue
        .ShapeRange.Fill.Solid
    .Font.ColorIndex = 5
  End If
End With
Next
Target.Select
End If
End Sub



Code này đã kiểm tra nếu bạn nhập trùng số sẽ xoá.
Code này bạn bỏ vào Thisworkbook (SheetChange và thay Activesheet=Sh) thì nó chạy cả 60 sheet của bạn như vậy

Chưa bàn về giải thuật, chỉ xét phần CÁCH TRÌNH BÀY CODE VBA thì theo em anh sealand bố trí lung tung quá, thụt ra, thụt vào vô tôi vạ (chẳng có quy luật gì). Nhìn code này mà theo dõi được đâu là cặp IF.. End IF cũng... chết
(xin lỗi anh sealand nha)
Mạn phép trình bày lại:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i, Cl As Range
  If Not Intersect(Target, [B4:C13]) Is Nothing Then
    If Target.Cells.Count <> 1 Then Exit Sub
    If Evaluate("=COUNTIF($B$4:$C$13," & Target & ")") > 1 Then
      Target = ""
      Target.Select
      Exit Sub
    End If
    For i = 1 To 10
      Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues)
      Shapes("Sh" & Format(i, "00")).Select
      With Selection
        If Cl Is Nothing Then
          .ShapeRange.Fill.Visible = msoFalse
          .Font.ColorIndex = 1
        ElseIf Cl.Column = 2 Then
          .ShapeRange.Fill.ForeColor.SchemeColor = 13
          .ShapeRange.Fill.Visible = msoTrue
          .ShapeRange.Fill.Solid
          .Font.ColorIndex = 3
        ElseIf Cl.Column = 3 Then
          .ShapeRange.Fill.ForeColor.SchemeColor = 43
          .ShapeRange.Fill.Visible = msoTrue
          .ShapeRange.Fill.Solid
          .Font.ColorIndex = 5
        End If
      End With
    Next
    Target.Select
  End If
End Sub
Dễ nhìn trước, xong mới phân tích sau
 
Hì, để thì nó dày đặc nên mình cứ đẩy đại chứ có chia theo nhóm gì đâu.
 
Hì, để thì nó dày đặc nên mình cứ đẩy đại chứ có chia theo nhóm gì đâu.

Với 1 code dài (vài trang) mà không bố trí đàng hoàng sẽ khó theo dõi lắm anh à! Bởi vậy em có thói quen khi copy code dù của bất kỳ ai để thử nghiệm thì điều đầu tiên em phải TRÌNH BÀY lại cái đã
----------------------------
Riêng phần code bài này em làm khác anh 1 chút. Không cần đổi tên Shape gì cả, cứ thằng nào là Oval thì tìm
1> Code trong Module
Mã:
Public Const DEFAULT_C_BACK = vbWhite
Public Const DEFAULT_C_TEXT = vbBlack
Function ShapeColorChange(ByVal objType As Object, ByVal rngSearch As Range) As Boolean
  Dim text As String
  Dim obj As Object, rFind As Range
  On Error Resume Next
  For Each obj In objType
    text = obj.ShapeRange.TextFrame.Characters.text
    Set rFind = rngSearch.Find(text, , xlValues, xlWhole)
    If Not rFind Is Nothing Then
      With obj.ShapeRange
        .Fill.Visible = msoTrue
        .Fill.ForeColor.RGB = rFind.Interior.color
        .TextFrame.Characters.Font.color = rFind.Font.color
      End With
      ShapeColorChange = True
    Else
      With obj.ShapeRange
        .Fill.Visible = msoTrue
        .Fill.ForeColor.RGB = DEFAULT_C_BACK
        .TextFrame.Characters.Font.color = DEFAULT_C_TEXT
      End With
      ShapeColorChange = False
    End If
  Next
End Function
2> Code sự kiện Change
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, bRet As Boolean
  On Error GoTo ExitSub
  If Not Intersect(Range("B4:C100"), Target) Is Nothing Then
    Set rng = Range("B4:C100")
    bRet = ShapeColorChange(Target.Parent.Ovals, rng)
  End If
ExitSub:
End Sub
Quy ước: Vùng dữ liệu tại cột B:C tô màu gì (cả nền và chữ) thì Oval sẽ được tô màu ấy
------------
Cũng dùng 1 vòng lập nhưng em duyệt qua các Oval, lấy Text của nó để tìm trên Range, cái nào thỏa điều kiện thì tô màu
Vì vậy, ưu điểm của nó là: Dù copy Range từ nơi khác Paste vào thì nó vẫn chạy đúng (không cần gõ từng cell)
 

File đính kèm

Nếu Ndu làm vậy đối với file ví dụ này thì OK, nhưng file thực tế có thêm Oval khác không liên quan hoặc nó có Text như vậy thì sao? Mình thì chỉ thích gọi đích danh vì không thể có 2 Oval cùng tên trên 1 sheet được.
 
Nếu Ndu làm vậy đối với file ví dụ này thì OK, nhưng file thực tế có thêm Oval khác không liên quan hoặc nó có Text như vậy thì sao? Mình thì chỉ thích gọi đích danh vì không thể có 2 Oval cùng tên trên 1 sheet được.

Cái đó do mình quyết định chứ anh
Tại sao lại vẽ 1 cái Oval hoàn toàn không liên quan đến bài toán mà không vẽ hình khác?
Mà cho dù là vậy, anh vẫn có giải pháp là GROUP toàn bộ những oval liên quan lại với nhau và dùng vòng lập duyệt theo group này ---> Quá đơn giản
(Giống trường hợp trong UserForm ta nhóm các control vào chung 1 Frame vậy)
 
Lần chỉnh sửa cuối:
em cảm ơn các thầy đã giúp em, em có 1 ít thắc mắc nữa mong các thầy chỉ với:.
1. thầy sealand code của thầy e đã sửa lại OK theo ý e nhưng có vấn đề là khi em nhập vào số 10 thì cả oval 1+oval10 đều bị tô màu.e sửa mãi k được.mong thầy chỉ
2. thầy
ndu96081631 ơi, e chỉ muốn tô màu chữ trong oval thui (Nếu được viền thì tốt) còn nền oval e để Nofill mà, hiện tại dựa vào code của thầy e vẫn k sửa đuệoc mong thầy chỉ
 
Lần chỉnh sửa cuối:
Bạn phải đưa file lên hay chép Code lên thì mới biết lỗi ở đâu chứ, vì bạn sửa rồi mà.

Rất có thể ở đây:

Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues)

Bạn sửa thành:

Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues, LookAt:=xlWhole)
 
Lần chỉnh sửa cuối:

2. thầy
ndu96081631 ơi, e chỉ muốn tô màu chữ trong oval thui (Nếu được viền thì tốt) còn nền oval e để Nofill mà, hiện tại dựa vào code của thầy e vẫn k sửa đuệoc mong thầy chỉ

Bạn khỏi cần sửa code gì cả! Bạn tô màu cho khu vực cột B và cột C thế nào thì Oval sẽ có màu thế nấy
Còn nếu bạn thật sự muốn No Fill thì chổ nào trong code có dòng .Fill.Visible = msoTrue hãy sửa thành .Fill.Visible = msoFalse
Tuy nhiên tôi thấy thế vẫn không hay vì viết vậy là chỉ mình bạn xài, trong khi tôi chỉ thích viết theo kiểu tổng quát
Tôi đề nghị sửa code thế này:
Mã:
Public Const DEFAULT_C_BACK = vbWhite
Public Const DEFAULT_C_TEXT = vbBlack
[COLOR=#ff0000]Public Const DEFAULT_C_FILL = 0[/COLOR]
Function ShapeColorChange(ByVal Objects As Object, ByVal rngSearch As Range) As Boolean
  Dim text As String, [COLOR=#ff0000]bChkFill As Boolean[/COLOR]
  Dim obj As Object, rFind As Range
  For Each obj In Objects
   [COLOR=#ff0000] If TypeName(obj) <> "Shape" Then Set obj = obj.ShapeRange[/COLOR]
    text = obj.TextFrame.Characters.text
    Set rFind = rngSearch.Find(text, , xlValues, xlWhole)
    If Not rFind Is Nothing Then
      With obj
       [COLOR=#ff0000] bChkFill = (rFind.Interior.Pattern <> xlNone)[/COLOR]
        .Fill.Visible = bChkFill
       [COLOR=#ff0000] If bChkFill Then .Fill.ForeColor.RGB = rFind.Interior.color[/COLOR]
        .TextFrame.Characters.Font.color = rFind.Font.color
      End With
      ShapeColorChange = True
    Else
      With obj
        [COLOR=#ff0000].Fill.Visible = DEFAULT_C_FILL[/COLOR]
       [COLOR=#ff0000] If DEFAULT_C_FILL Then .Fill.ForeColor.RGB = DEFAULT_C_BACK[/COLOR]
        .TextFrame.Characters.Font.color = DEFAULT_C_TEXT
      End With
      ShapeColorChange = False
    End If
  Next
End Function
Những chổ màu đỏ là những chổ sửa lại
Vẫn theo nguyên tắc đã nói từ đầu:
- Tô màu nền và chữ cho cột B, C thế nào thì Oval sẽ lấy màu thế nấy
- NoFill cột B và C thì Oval cũng NoFill theo
vân vân...
Code làm việc được với cả trường hợp ta nhóm các Object lại thành 1 Group
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn phải đưa file lên hay chép Code lên thì mới biết lỗi ở đâu chứ, vì bạn sửa rồi mà.

Rất có thể ở đây:

Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues)

Bạn sửa thành:

Set Cl = Sheet1.Range("B4:C13").Find(i, LookIn:=xlValues, LookAt:=xlWhole)
File gốc chưa sửa code cũng đã biij vậy rồi thầy ah
 
Bạn cứ sửa như bài trước là được
 
Bạn ơi! nhưng làm như thế nào mà được như vậy, hôm trước bạn
ndu96081631 có làm bằng cách chụp ảnh text box thì mình biết rồi, nhưng cách này mình chưa hỉểu lắm, bạn giải thích được không?

 
Vậy thì cũng y chang bài 4 tôi đã làm thôi
Giải pháp không macro đây! Mời xem.
Chào anh, em có tải file của anh về nghiên cứu nhưng ko tìm ra được anh làm thế nào để link các ô ở cột V với hình được, anh có thể chỉ dẫn cho em được không ạ. Em cảm ơn anh
Bài đã được tự động gộp:

e xin lỗi đã không xem kỹ, e tìm đc rồi ạ. e cảm ơn a, cách của a quá hay
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom