Lạ nhỉ! Tôi mở file này trên WinXP + Office 2003, vẫn xem được thoải mái mà chẳng cần chỉnh bất cứ thứ gìNói thêm rằng máy tôi chẳng có font Lào gì đâu nha:
View attachment 71859Còn cái vụ chỉnh Desktop gì gì đó tốt nhất không nên làm nếu không muốn gặp rắc rối sau này
Chữ lào Chuẩn nó phải như thế này,bạn xem ảnh.
phải công nhận là kết quả trên cả mong muốn ,nhưng mà tại sao cái form đó nó lại không mở được khi ta ở sheet khác.ý mình muốn là:có thể gọi form và sừa dữ liệu được khi ta ở một sheet khác(vì sheet có dữ liệu sẽ bị ẩn).bạn giúp mình nhé,cảm ơn bạn.Nhưng cuối cùng bạn có sửa lại như bài #79 chưa vậy? Kết quả như mong đợi chứ?
phải công nhận là kết quả trên cả mong muốn ,nhưng mà tại sao cái form đó nó lại không mở được khi ta ở sheet khác.ý mình muốn là:có thể gọi form và sừa dữ liệu được khi ta ở một sheet khác(vì sheet có dữ liệu sẽ bị ẩn).bạn giúp mình nhé,cảm ơn bạn.
Dữ liệu mình có nhiều cột,mà chiều dài của form thì có hạn,không biết bạn Sealand còn cách nào khà thi hơn không.Để làm điều này chỉ có thể dùng phương thức gán rowsource. Mà cái phương thức này nó lòng vòng thêm. Vậy thì tốt nhất là thêm mấy cái Label là xong.
Option Explicit
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim cot, Vl1, Vl2
Dim i, j, Tm()
Tm = Rng
Cancel = True
cot = InputBox("Sua dong hien thoi cot may? (1-5)")
If InStr(1, "1;2;3;4;5", cot) = 0 Then
MsgBox "Sai cot"
Exit Sub
End If
Vl2 = InputBox("Nhap gia tri can thay doi", , Tm(ListBox1.ListIndex + 1, cot))
Tm(Me.ListBox1.ListIndex + 1, cot) = Vl2
Rng = Tm
Me.ListBox1.RowSource = ""
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
End Sub
'------------------------------------
Private Sub UserForm_Initialize()
Dim i, Tm
Me.ListBox1.ColumnHeads = True
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
For i = 1 To Me.ListBox1.ColumnCount
Me.ListBox1.ColumnWidths = "80;80;80;100;90"
Next
Me.ListBox1.ListIndex = 0
End Sub
'------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Rng = Nothing
End Sub
Option Explicit
Public Rng As Range
Sub Mo()
Dim TB
Application.DisplayAlerts = False
TB = "Ban chon vung sua du lieu, neu chon duoi 5 cot Pro" & Chr(10)
TB = TB & "se tu dong mo rong them thanh 5 cot. Neu thua se cat"
On Error GoTo thoat:
Set Rng = Application.InputBox(TB, , , , , , , 8)
If Rng.Columns.Count <> 5 Then Set Rng = Rng.Columns(1).Resize(, 5)
MsgBox "Ban chon vung: " & Rng.Address & " tren sheet: " & Rng.Parent.Name
UserForm1.Show
Application.DisplayAlerts = True
Exit Sub
thoat:
Set Rng = Nothing
MsgBox "Ban khong chon hay chon loi vung sua"
Application.DisplayAlerts = True
End Sub
Bạn Sealand xem lại giúp mình với,mình đánh số vào rồi mà nó không hoạt động gì cả.Đã vậy, mình làm tổng hợp luôn. Muốn chọn đâu thì chọn (Mẹo chọn là chỉ chọn cột đầu rồi tự mở thành 5 cột)
Dòng đầu tiên bao giờ cũng là tiêu đề, muốn lấy tiêu đề cột chọn từ dòng 1
1/Code của Form (Gọn hơn là đằng khác):
Mã:Option Explicit Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim cot, Vl1, Vl2 Dim i, j, Tm() Tm = Rng Cancel = True cot = InputBox("Sua dong hien thoi cot may? (1-5)") If InStr(1, "1;2;3;4;5", cot) = 0 Then MsgBox "Sai cot" Exit Sub End If Vl2 = InputBox("Nhap gia tri can thay doi", , Tm(ListBox1.ListIndex + 1, cot)) Tm(Me.ListBox1.ListIndex + 1, cot) = Vl2 Rng = Tm Me.ListBox1.RowSource = "" Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address End Sub '------------------------------------ Private Sub UserForm_Initialize() Dim i, Tm Me.ListBox1.ColumnHeads = True Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address For i = 1 To Me.ListBox1.ColumnCount Me.ListBox1.ColumnWidths = "80;80;80;100;90" Next Me.ListBox1.ListIndex = 0 End Sub '------------------------------ Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Set Rng = Nothing End Sub
2/Code của Nút mở Form:
Mã:Option Explicit Public Rng As Range Sub Mo() Dim TB Application.DisplayAlerts = False TB = "Ban chon vung sua du lieu, neu chon duoi 5 cot Pro" & Chr(10) TB = TB & "se tu dong mo rong them thanh 5 cot. Neu thua se cat" On Error GoTo thoat: Set Rng = Application.InputBox(TB, , , , , , , 8) If Rng.Columns.Count <> 5 Then Set Rng = Rng.Columns(1).Resize(, 5) MsgBox "Ban chon vung: " & Rng.Address & " tren sheet: " & Rng.Parent.Name UserForm1.Show Application.DisplayAlerts = True Exit Sub thoat: Set Rng = Nothing MsgBox "Ban khong chon hay chon loi vung sua" Application.DisplayAlerts = True End Sub
Bạn Sealand ơi,Trong bài #68 có thể tính toán trong TextBox được không,Ví dụ Cot4 bằng Cot3 + Cot2 .Sửa trưc tiếp thì không được. Tốt nhất là ta liên kết ra textbox. KhanHa Tham khao nha
Thì bạn cứ dùng vòng lập For... Next bình thường duyệt qua các dòng trong ListBox ---> Muốn cộng trừ gì mà chẳng được (y chang như làm trên bảng tính)Mình đã làm theo cách của bạn,trong bài "Hỏi về Code trong UserForm" nhưng nó không hoạt động,Nhờ bạn làm giúp mình với.cảm ơn bạn.