gameonly308
Thành viên hoạt động
- Tham gia
- 4/5/09
- Bài viết
- 197
- Được thích
- 10
Dùng cái này nhé bạn, gồm các biến và thông số:Em muốn thể hiện chiều cao của nước trong bể, khi thay đổi số liệu chiều cao, thì cột nước ứng với Shape thể hiện chiều cao của nước sẽ thay đổi.
Mong các anh chị hướng dẫn em cách làm với ạ, em xin cảm ơn!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", [K7], 20, 300, 50, 50
End Sub
Sub test_changeShapesHeight()
changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", 2,20 , 300, 50, 50
End Sub
' code dưới copy vào module
Function changeShapesHeight(sp1 As String, sp2 As String, Optional ar As String, Optional h As Integer, _
Optional per1 As Integer = 20, Optional per2 As Integer = 300, _
Optional areaTop As Integer = 30, Optional areaLeft As Integer = 20) As Integer
If h < 0 Or h > per2 / per1 Then MsgBox "Data Out": Exit Function
Dim i
With ActiveSheet.Shapes.Range(Array(sp2))
.Adjustments.Item(1) = 0.25
.Left = areaLeft: .Top = areaTop
.Height = per2
End With
With ActiveSheet.Shapes.Range(Array(sp1))
i = .Width
.Adjustments.Item(1) = 0.25
.Left = areaLeft: .Top = per2 - h * per1 + areaTop
.Height = h * per1
End With
If ar = vbNullString Then Exit Function
With ActiveSheet.Shapes.Range(Array(ar))
.Left = areaLeft + i + 20: .Top = per2 - h * per1 + areaTop
.Height = h * per1
.Width = 0
End With
End Function
Ok, để mình test thử xem ạ!Dùng cái này nhé bạn, gồm các biến và thông số:
1. sp1 - Shapes A
2. sp2 - Shapes B
3. ar - Shapes Arrow
4. h - [K7]
5. per1 - tỉ lệ chiều cao Shapes A (h*per1)
6. per2 - chiều cao Shape B
7. areaTop - vị trí các Shape dọc
8. areaLeft - vị trí các Shape ngang
Copy code lắng nghe sự kiện thay đổi một select:
Bỏ vào code worksheet sheet1Mã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect([K7], Target) Is Nothing Then changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", Selection.Value, 20, 300, 50, 50 End If End Sub
Mã:Sub test_changeShapesHeight() changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", 2,20 , 300, 50, 50 End Sub ' code dưới copy vào module Function changeShapesHeight(sp1 As String, sp2 As String, Optional ar As String, Optional h As Integer, _ Optional per1 As Integer = 20, Optional per2 As Integer = 300, _ Optional areaTop As Integer = 30, Optional areaLeft As Integer = 20) As Integer If h < 0 Or h > per2 / per1 Then MsgBox "Data Out": Exit Function Dim i With ActiveSheet.Shapes.Range(Array(sp2)) .Adjustments.Item(1) = 0.25 .Left = areaLeft: .Top = areaTop .Height = per2 End With With ActiveSheet.Shapes.Range(Array(sp1)) i = .Width .Adjustments.Item(1) = 0.25 .Left = areaLeft: .Top = per2 - h * per1 + areaTop .Height = h * per1 End With If ar = vbNullString Then Exit Function With ActiveSheet.Shapes.Range(Array(ar)) .Left = areaLeft + i + 20: .Top = per2 - h * per1 + areaTop .Height = h * per1 .Width = 0 End With End Function
Cái “can 1” và “can 2” ở đây là gì thế ạ?Dùng cái này nhé bạn, gồm các biến và thông số:
1. sp1 - Shapes A
2. sp2 - Shapes B
3. ar - Shapes Arrow
4. h - [K7]
5. per1 - tỉ lệ chiều cao Shapes A (h*per1)
6. per2 - chiều cao Shape B
7. areaTop - vị trí các Shape dọc
8. areaLeft - vị trí các Shape ngang
Copy code lắng nghe sự kiện thay đổi một select:
Bỏ vào code worksheet sheet1Mã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect([K7], Target) Is Nothing Then changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", Selection.Value, 20, 300, 50, 50 End If End Sub
Mã:Sub test_changeShapesHeight() changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", 2,20 , 300, 50, 50 End Sub ' code dưới copy vào module Function changeShapesHeight(sp1 As String, sp2 As String, Optional ar As String, Optional h As Integer, _ Optional per1 As Integer = 20, Optional per2 As Integer = 300, _ Optional areaTop As Integer = 30, Optional areaLeft As Integer = 20) As Integer If h < 0 Or h > per2 / per1 Then MsgBox "Data Out": Exit Function Dim i With ActiveSheet.Shapes.Range(Array(sp2)) .Adjustments.Item(1) = 0.25 .Left = areaLeft: .Top = areaTop .Height = per2 End With With ActiveSheet.Shapes.Range(Array(sp1)) i = .Width .Adjustments.Item(1) = 0.25 .Left = areaLeft: .Top = per2 - h * per1 + areaTop .Height = h * per1 End With If ar = vbNullString Then Exit Function With ActiveSheet.Shapes.Range(Array(ar)) .Left = areaLeft + i + 20: .Top = per2 - h * per1 + areaTop .Height = h * per1 .Width = 0 End With End Function
Cái tên của shapes đấy . CLick vào shapes nhìn lên Hộp tên sẽ thấy.Cái “can 1” và “can 2” ở đây là gì thế ạ?
Bạn có thể gửi luôn file excel cho mình được không? Mình vừa đối chiếu vừa nghiên cứu luôn!Cái tên của shapes đấy . CLick vào shapes nhìn lên Hộp tên sẽ thấy.
Nếu không biết tên shapes của bạn chương trình sẽ biết điều khiển cái shapes nào đây
Mình đã làm như bạn hướng dẫn nhưng không chạy, khi thay đổi chiều cao, các Shape không thay đổi cái gì cảCái tên của shapes đấy . CLick vào shapes nhìn lên Hộp tên sẽ thấy.
Nếu không biết tên shapes của bạn chương trình sẽ biết điều khiển cái shapes nào đây
Thì cái file của bạn đấy, copy code theo hướng dẫn.Bạn có thể gửi luôn file excel cho mình được không? Mình vừa đối chiếu vừa nghiên cứu luôn!
Đây bạn, không đượcThì cái file của bạn đấy, copy code theo hướng dẫn.
chọn excel - Alt + F11 , thấy sheet bỏ code vô, chuột phải add module bỏ code vô, save file thành xlsm / xlsb
changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", Selection.Value, 20, 300, 50, 50Đây bạn, không được
Cái Shape D không di chuyển và số trong Shape không thay đổi khi chiều cao thay đổi bạn ạ !changeShapesHeight "can 2", "can 1", "Straight Arrow Connector 4", Selection.Value, 20, 300, 50, 50
Bạn định cho cột của bạn nhảy khỏi excel sao lại cho thông số 88
20 và 300 là 2 số quyết định tỉ lệ chiều cao của bạn (300 / 20 = 15) bạn thay đổi thì nó thay đổi
Xong nhéCái Shape D không di chuyển và số trong Shape không thay đổi khi chiều cao thay đổi bạn ạ !
OK cảm ơn bạn, có gì vướng mắc tiếp mong bạn sẽ hỗ trợ mình thêm nhé!Xong nhé
Đưa vào thuật toán tính độ nghiên, tại tính lười biến nặng lắm Bác, mà có tính ra thì chỉ được 60% chính xác dể nhìn, vì co giản Shapes trong excel chỉ ở dạng xem 2DNói chung để làm chuẩn, đẹp thì phải mệt nhiều.
Vd. nhập 1, 2 hoặc 14 thì thấy ngồ ngộ thế nào ấy. Nhất là khi nhập 14