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
Bạn dùng code sau cho sheet cần áp dụng xem sao: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 đỡ
Ẩ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.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.
...
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: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.
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.
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
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.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.
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.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é!
bác test tiếp file e vừa "mới chế" nhé![]()
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ì ạ?kiểm tra xem anh này có nội dung hay không
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.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
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.
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.
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)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
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
Thử chỉnh lại như sau: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
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
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ếtEm 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)
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 tbx As TextBox
For Each tbx In TextBoxes
tbx.Visible = Len(Trim(tbx.Caption))
Next
End Sub
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 đỡ.
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
Anh chỉ cần chỉnh trong Fomat Text box => Text => Resize text to fit text là đượcEm 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 đỡ.