Ẩn các text box khi không có dữ liệu (1 người xem)

Liên hệ QC

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

hoangminhtien

Thành viên gắn bó
Tham gia
29/2/08
Bài viết
1,685
Được thích
2,227
Nghề nghiệp
Mechanical Engineering
Trong file của em có nhiều text box, em muốn khi các text box này không có dữ liệu thì nó sẽ ẩn đi (không nhìn thấy). Nhờ các anh chị em giúp đỡ
 

File đính kèm

Trong file của em có nhiều text box, em muốn khi các text box này không có dữ liệu thì nó sẽ ẩn đi (không nhìn thấy). Nhờ các anh chị em giúp đỡ
Bạn dùng code sau cho sheet cần áp dụng xem sao:
[GPECODE=vb]Private Sub Worksheet_Activate()
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes
If Not Sh.TextFrame2.HasText Then Sh.Visible = msoFalse
Next
End Sub[/GPECODE]
Câu lệnh trong vòng For có thể thay bởi câu lệnh này cũng được: Sh.Visible = Sh.TextFrame2.HasText

Mà tôi thấy ý tưởng của bạn có thể gây ra tình trạng có rất nhiều Object ẩn trong file, giống như virus macro tạo ra vậy.
 
Upvote 0
Mà tôi thấy ý tưởng của bạn có thể gây ra tình trạng có rất nhiều Object ẩn trong file, giống như virus macro tạo ra vậy.
...
Ẩn Shape cũng nguy hiểm lắm, No Fill, No Line đỡ hơn, khi cần tìm thì Go To > Special... > Object.
[gpecode=vb]
If Not Sh.TextFrame2.HasText Then Sh.Fill.Visible = msoFalse: Sh.Line.Visible = msoFalse
[/gpecode]
 
Upvote 0
Thật ra bài toán của em thế này, em muốn tạo ra 1 cái biểu đồ xương cá (fish bone diagram) cố định trong 1 sheet, và sheet này chỉ dùng để xem hoặc in, người dùng không tác động vào sheet này.
Các dữ liệu của text box được lấy từ sheet khác, vì vậy khi các text box không có dữ liệu thì các text box này và mũi tên phía trước nó cần ẩn đi.
Anh chị em nào đã từng làm về cái biểu đồ này hãy chia sẽ cách làm và em nhờ các anh chị em tiếp tục hướng dẫn.
 

File đính kèm

Upvote 0
Thật ra bài toán của em thế này, em muốn tạo ra 1 cái biểu đồ xương cá (fish bone diagram) cố định trong 1 sheet, và sheet này chỉ dùng để xem hoặc in, người dùng không tác động vào sheet này.
Các dữ liệu của text box được lấy từ sheet khác, vì vậy khi các text box không có dữ liệu thì các text box này và mũi tên phía trước nó cần ẩn đi.
Anh chị em nào đã từng làm về cái biểu đồ này hãy chia sẽ cách làm và em nhờ các anh chị em tiếp tục hướng dẫn.
Tôi có ý tưởng thế này, nhưng do bận quá nên chưa thực hiện được, bạn thử triển khai xem:
1. Copy và dán tên của các mũi tên vào thuộc tính Alt Text của các TextBox tương ứng.
2. Tạo code duyệt các Shape (Sh) trên sheet, hễ anh nào là TextBox (dựa vào thuộc tính Sh.Type) thì kiểm tra xem anh này có nội dung hay không, nếu không có thì sẽ ẩn 2 Shape: Sh và Sh.AlternativeText, ngược lại thì cho hiện chúng lên, sử dụng câu lệnh có dạng Sh.Visible = Sh.TextFrame2.HasText
 
Upvote 0
Bây giờ em ở sheet2 em có 1 text box, và giá trị của text box này em tham chiếu đến ô A1 của sheet1, bây giờ yêu cầu là khi A1 ở sheet1 ="" thì text box này ẩn đi. nhờ các anh chị em hướng dẫn.
 

File đính kèm

Upvote 0
bác thử đoạn code sau cho Sheet2:
Mã:
Private Sub Worksheet_Activate()
Dim obj As Object
Set obj = ActiveSheet.Shapes("TextBox 1")
    If Sheets("Sheet1").Range("A1") = "" Then
        obj.Visible = False
    Else
        obj.Visible = True
    End If
    
    Set obj = Nothing
End Sub
 
Upvote 0
bác thử đoạn code sau cho Sheet2:
Cám ơn bạn, tuy nhiên ở Sheet2 mình có nhiều text box và mỗi text box thì tham chiếu đến 1 ô ở Sheet1. Làm thế nào để có thể quét toàn bộ các text box này.
Ở câu hỏi #1 mình chỉ nghĩ là nó không có dữ liệu thì đã được anh Nghiaphuc, leonguyenz và anh Ndu trả lời, nhưng khi nó có dữ liệu (tham chiếu đến 1 ô khác) nhưng ô khác lại không có dữ liệu thì làm thế nào. Nhờ các anh chị hướng dẫn.
 
Upvote 0
Cám ơn bạn, tuy nhiên ở Sheet2 mình có nhiều text box và mỗi text box thì tham chiếu đến 1 ô ở Sheet1. Làm thế nào để có thể quét toàn bộ các text box này.
Ở câu hỏi #1 mình chỉ nghĩ là nó không có dữ liệu thì đã được anh Nghiaphuc, leonguyenz và anh Ndu trả lời, nhưng khi nó có dữ liệu (tham chiếu đến 1 ô khác) nhưng ô khác lại không có dữ liệu thì làm thế nào. Nhờ các anh chị hướng dẫn.

bác thử tiếp file sau xem, mình thử với 3 textbox tại sheet 2, code được cài tại sự kiện WS_change tại sheet 1

Link: https://www.mediafire.com/?22zcc8b8i447o3a
 
Lần chỉnh sửa cuối:
Upvote 0
bác thử tiếp file sau xem, mình thử với 3 textbox tại sheet 2, code được cài tại sự kiện WS_change tại sheet 1
Chưa được bạn ạ, A1, A2, A3 không chứa dữ liệu thì các text box vẫn không ẩn.
Với lại các ô tham chiếu ở Sheet1 có thể không nằm theo 1 quy định nhất định.
Nhờ các anh chị giúp tiếp nhé!
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Em thử xoá các số 1 là có kết quả mà!
 
Upvote 0
kiểm tra xem anh này có nội dung hay không
Kiểm tra có nội dung ngoài hastext còn cú pháp nào nữa không anh? ngoài ra muốn kiểm tra nội dung của nó là gì thì dùng cái gì ạ?
Em muốn nó như thế này
Private Sub Worksheet_Activate()
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes
Sh.Visible = msoFalse
If Kiem tra noi dung cua shape <> "" Then Sh.Visible = msoTrue
Next
End Sub
mà không biết cái "kiem tra noi dung cua shape" dùng cái gì? nhờ các anh chị hướng dẫn.
 
Upvote 0
Cám ơn bạn, nhưng mình không hiểu file của bạn lắm (nó sử dụng thế nào), nhờ bạn giải thích.

bạn tải file sau 3_1, mình có ghi chú cụ thể trong đó **~**,
'- - -
do số liệu của bác được chỉnh sửa trực tiếp tại sheet và có thể sẽ phải chèn row, column ---> mình nghĩ dùng bảng tham chiếu địa chỉ + tên các object --> rõ ràng + dễ hiểu. (ko cần dùng Name hay công thức trên các Object nữa)

chúc vui !

Link: https://www.mediafire.com/?l2iasqqwuyb6a19
 
Lần chỉnh sửa cuối:
Upvote 0
Kiểm tra có nội dung ngoài hastext còn cú pháp nào nữa không anh? ngoài ra muốn kiểm tra nội dung của nó là gì thì dùng cái gì ạ?
Em muốn nó như thế này

mà không biết cái "kiem tra noi dung cua shape" dùng cái gì? nhờ các anh chị hướng dẫn.

Trả lời bài 1, bạn tự suy ngẫm nhé.

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Shapes("Text Box 5").TextFrame.Characters.Text = "a" Then
        Shapes("Text Box 5").Visible = True
    Else
        Shapes("Text Box 5").Visible = False
    End If
    
End Sub
 

File đính kèm

Upvote 0
Trả lời bài 1, bạn tự suy ngẫm nhé.

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Shapes("Text Box 5").TextFrame.Characters.Text = "a" Then
        Shapes("Text Box 5").Visible = True
    Else
        Shapes("Text Box 5").Visible = False
    End If
    
End Sub
Em thử áp dụng vào bài của em, không biết là do sai ở đâu mà toàn báo lỗi, nhờ các bác hướng dẫn (thông cảm cho việc gà mờ của em)
Private Sub Worksheet_Activate()
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes
Sh.Visible = msoFalse
If Sh.TextFrame.Characters.Text <> "" Then Sh.Visible = msoTrue
Next
End Sub
 

File đính kèm

Upvote 0
Em thử áp dụng vào bài của em, không biết là do sai ở đâu mà toàn báo lỗi, nhờ các bác hướng dẫn (thông cảm cho việc gà mờ của em)
Thử chỉnh lại như sau:

Mã:
Private Sub Worksheet_Activate()
    Dim Sh As Shape
    For Each Sh In ActiveSheet.Shapes
        If Sh.Type = msoTextBox Then
            If Sh.TextFrame.Characters.Text <> " " Then
                Sh.Visible = msoTrue
            Else
                Sh.Visible = msoFalse
            End If
        End If
    Next
    
End Sub
 
Upvote 0
Em thử áp dụng vào bài của em, không biết là do sai ở đâu mà toàn báo lỗi, nhờ các bác hướng dẫn (thông cảm cho việc gà mờ của em)
Mình chỉ ra nguyên nhân lỗi ở file của bạn là do có 1 line ẩn nên khi chạy code sẽ bị báo lỗi thêm thuộc tính type để bắt lỗi sẽ hết
 
Upvote 0
Em thử áp dụng vào bài của em, không biết là do sai ở đâu mà toàn báo lỗi, nhờ các bác hướng dẫn (thông cảm cho việc gà mờ của em)

Viết vầy nè:
Mã:
Private Sub Worksheet_Activate()
  Dim tbx As TextBox
  For Each tbx In TextBoxes
    tbx.Visible = Len(Trim(tbx.Caption))
  Next
End Sub
 
Upvote 0
Em đã làm theo 2 cách của anh Hai Lúa Miền Tây à anh ndu96081631, tuy nhiên cách của anh Hai Lúa Miền Tây khi group với mũi tên thì không ẩn được mũi tên, còn cách của anh ndu96081631 em vẫn chưa thấy hoạt động.

Nhờ các anh chị tiếp tục giúp đỡ.
 

File đính kèm

Upvote 0
Em đã làm theo 2 cách của anh Hai Lúa Miền Tây à anh ndu96081631, tuy nhiên cách của anh Hai Lúa Miền Tây khi group với mũi tên thì không ẩn được mũi tên, còn cách của anh ndu96081631 em vẫn chưa thấy hoạt động.

Nhờ các anh chị tiếp tục giúp đỡ.

File ở bài 18 bạn đưa đâu có giống với file này chứ
Thử vầy:
Mã:
Private Sub Worksheet_Activate()
  Dim shp As Shape, tbx As Shape
  Dim strTmp As String
  For Each shp In Shapes
    If shp.Type = msoGroup Then
      For Each tbx In shp.GroupItems
        If tbx.Type = msoTextBox Then
          strTmp = tbx.TextFrame.Characters.Text
          shp.Visible = Len(Trim(strTmp))
        End If
      Next
    End If
  Next
End Sub
Lưu ý: Code này không hoạt động trên Excel 2003 nha
 
Upvote 0
Em lại có 1 phát sinh mới như sau:
Với các text box và mũi tên đã được group như các bài trên, chiều dài của các text box em đã cố định, và em muốn các text box này auto height cho độ rộng của nó theo text.
Tiếp tục nhờ các anh chị em giúp đỡ.
 
Upvote 0
Em lại có 1 phát sinh mới như sau:
Với các text box và mũi tên đã được group như các bài trên, chiều dài của các text box em đã cố định, và em muốn các text box này auto height cho độ rộng của nó theo text.
Tiếp tục nhờ các anh chị em giúp đỡ.
Anh chỉ cần chỉnh trong Fomat Text box => Text => Resize text to fit text là được
 
Upvote 0

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

Back
Top Bottom