Tức là vẫn có thanh Formula nhưng lại không hiển thị lên thanh đó phải không bạn ???
Thân!
Đúng rồi bạn ạ, bạn có cách nào chỉ mình với.
Ủa, sao kỳ vậy... Hình như khi protect sheet thì những cell có thuộc tính hidden sẽ bị ẩn công thức trên thanh Formula mà ta
Tôi ko biết về VBA nhưng tôi nghĩ việc đầu tiên sẽ là unlock toàn bộ cell, sau đó quét xem cell nào chứa công thức thì hidden nó lại.. Tiếp theo là protect sheet... Đến lúc này thì chắc ăn 100% sẽ ko nhìn thấy công thức trên thanh Formula
Ko biết có đúng ý bạn Namvba ko ta?
ANH TUẤN
À, hiểu rồi, có nghĩa là muốn bảo vệ bảng tính không cho hiện công thức lên.
Em cứ tưởng là File bình thường (không dùng protect) mà làm như vậy thì . . . chưa biết vì chưa thấy.
Cảm ơn bác!
Món này nếu tự record macro thì sẽ bị vướng ở 1 chồ: "LÀM SAO BIẾT CELL NÀO CHỨA CÔNG THỨC?"
vậy Bắp cho hỏi trong VBA, mình sẽ làm như thế nào?
ANH TUẤN
Món này nếu tự record macro thì sẽ bị vướng ở 1 chồ: "LÀM SAO BIẾT CELL NÀO CHỨA CÔNG THỨC?"
vậy Bắp cho hỏi trong VBA, mình sẽ làm như thế nào?
ANH TUẤN Đó là nhờ thuộc tính .HasFormula VD : Xét mảng đó có công thức hay không ??
Worksheets("Sheet1").Activate Set rr = Application.InputBox(prompt:="Select a range on this worksheet", Type:=8) If rr.HasFormula = True Then MsgBox "Every cell in the selection contains a formula" End If Thân!
Cho hỏi thêm:
1> Nếu ko cần hộp Input, cứ để cho Excel tự quét thì có phải là dùng:
Cells.HasFormula ???
2> Có phải là nên đặt nó vào trong sự kiện Worksheet_change ??? Vì theo tôi nghĩ, cứ khi ta gõ công thức vào cell nào đó thì lập tức nó dc gán thuộc tính Hidden... Có đúng thế ko nhỉ?
Mong giúp! (Ngu VBA)
ANH TUẤN
Cho hỏi thêm:
1> Nếu ko cần hộp Input, cứ để cho Excel tự quét thì có phải là dùng:
Cells.HasFormula ???
2> Có phải là nên đặt nó vào trong sự kiện Worksheet_change ??? Vì theo tôi nghĩ, cứ khi ta gõ công thức vào cell nào đó thì lập tức nó dc gán thuộc tính Hidden... Có đúng thế ko nhỉ?
Mong giúp! (Ngu VBA)
ANH TUẤN Thân!
Món này nếu tự record macro thì sẽ bị vướng ở 1 chồ: "LÀM SAO BIẾT CELL NÀO CHỨA CÔNG THỨC?" Tuấn ghi macro với lệnh Goto trong menu edit ; nó sẽ như thế này:
[b] Sub MacroGoTo()[/b] Cells.Select Selection.SpecialCells(xlCellTypeFormulas, 23).Select[b] End Sub[/b] /-(ay Tuấn cò thể tìm kiếm với từ khóa SpecialCells trên diễn đàn (nói nhỏ, có 1 bài của mình í nha!!) Lần chỉnh sửa cuối: 9/10/07
Tuấn ghi macro với lệnh Goto trong menu edit ; nó sẽ như thế này: [B]
Sub MacroGoTo()[/B]
Cells.Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select[B]
End Sub[/B] Tuyệt vời. Có những điều ngay trong nhà ta, thế mà cứ dòm ngó sang nhà hàng xóm để . . . tìm kiếm . Chắc do . . . bản năng Chiêu Goto Special làm nhiều, thế mà lại quên mất. Cảm ơn bác nhiều nhé.Thân!
Đúng thế... giống như lần trước ko biết làm thế nào đễ SUM và bỏ qua những cell ẫn... Ấy thế mà Go to cái thấy ngay... Cám ơn lảo tiền bối... hi.. hi.. Nếu gọi là HỌC thì chổ này chính là HỌC đây!... Vấn đề chỉ thật sự đơn giản khi ta.. biết rồi...
Ha... ha.... làm dc rồi... Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
Cells.Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Selection.FormulaHidden = True
Selection.Locked = True
ActiveSheet.Protect
Range("A1").Select
End Sub ANH TUẤN
Không cho hiện công thức trên thanh Formula bar Mình viết đoạn mã sau thì ô nào trên bảng tính có công thức sẽ tự động khóa không cho nhập dữ liệu nếu như không có Password. Khi nhập đúng password thì sẽ cho chỉnh sữa nhưng khi con trỏ rời khỏi ô thì ô sẽ tự động khóa. Còn cách để không hiện công thức trên thang Formula bar mình làm mãi không được, bạn nào biết chỉ cụ thể mình với. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
For Each rng In Target.Cells
If rng.HasFormula Then
ActiveSheet.Protect ("1968")
Exit Sub
Else
ActiveSheet.Unprotect ("1968")
End If
Next rng
End Sub
Mình hỏi cách dấu công thức trên thanh Formula Bar, chứ không cho chỉnh sửa thì được rồi.
Các bạn có cách nào bằng VBA chỉ mình với
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
Cells.Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Selection.FormulaHidden = True
Selection.Locked = True
ActiveSheet.Protect
Range("A1").Select
End Sub ANH TUẤN Lần chỉnh sửa cuối: 11/10/07
Bác thử chạy code dưới xem có bị lỗi không ạ. Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR=red]On Error Resume Next
[/COLOR]ActiveSheet.Unprotect
[COLOR=red]Cells.Locked = False
[/COLOR]Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Selection.FormulaHidden = True
Selection.Locked = True
ActiveSheet.Protect
Range("A1").Select
End Sub Vấn đề 1: Không vấn đề gì Vấn đề 2: Bác thêm cái bẫy lỗi vào để tránh trường hợp toàn bộ sheet không có công thức. Bác nên chọn Cells.Locked=False thay cho Cells.Select để có thể tiếp tục nhập dữ liệu ở những ô không có công thức. Lần chỉnh sửa cuối: 11/10/07
Mình có đoạn code sau khi chạy nó tự động khóa những ô có công thức trong Worbook còn các khác nhập bình thường, Muốn sửa hoặc xóa các ô có công thì thì mình phải nhập Password là 1968 khi co trỏ rời khỏi ô thì ô đó sẽ tự động khóa không cho chỉnh sửa. Cho mình hỏi đoạn code sau cần thêm câu lệnh gì để không hiện công trức trên thanh Formula Bar, mong được các bạn chỉ cụ thể cho mình với. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
For Each rng In Target.Cells
If rng.HasFormula Then
ActiveSheet.Protect ("1968")
Exit Sub
Else
ActiveSheet.Unprotect ("1968")
End If
Next rng
End Sub Page 2
Sao tôi test code của bạn Namvba nó chẳng hoạt động vậy? Bạn minhlev cho biết ý kiến đi!
Bác xem và có thể làm theo bài số 21. Còn giải quyết theo hướng của bác thì chỉ cần chỉnh lại 1 chút như code sau: Sub WorkSheet_Change(ByVal Target As Range)
Dim rng As Range
ActiveSheet.Unprotect ("1968")
On Error Resume Next
Cells.Locked = False
For Each rng In Target.Cells
If rng.HasFormula Then
rng.Locked = True
rng.FormulaHidden = True
End If
Next rng
ActiveSheet.Protect ("1968")
End Sub Lần chỉnh sửa cuối: 12/10/07
Nếu như vô tình nhập vào 1 cell có công thức thì tất nhiên là ko dc rồi... vậy phải tự mình vào menu Tools đễ Unprotect.. cũng mất công quá... Giá như có thể làm 1 Input Message đễ mỗi khi sửa vào cell có công thức thì nó hiện ra, gõ đúng thì cho sửa... gõ sai hoặc Cancel--> ko làm gì cả
Bạn minhlev cải tiến tiếp xem!
ANH TUẤN
Bac MinhLev ơi kiểm tra theo cách của bạn không chạy được, nhờ bác xem lại thử. Ý mình muốn khi viết đoạn code của mình thì tất cả các sheet ô nào có công thức tự động khóa, nếu nhập đúng Password thì mới chỉnh sửa được, khi rời khỏi ô sẽ tự động khóa, còn các ô khác không có công thức vẫn nhập bình thường.
Giờ mình muốn thêm các ô có công thức bị khóa đồng thời không hiện công thức lên thanh Formula, khi nào nhập đúng Password thì mới hiện công thức và cho chỉnh sửa.
Cái code của minhlev chạy dc đấy chứ.. có điều là chưa có khung nhập pass thôi.. Nó vẫn đạt dc yêu cầu là những cell chứa công thức thì bị khóa, còn lại các cell khác thì dc phép nhập bình thường...
Thưa bác NamVBA, Code của tôi chạy trong worksheet, còn code của bác chạy trong this workbook. Tôi thấy code của bác cũng rất hay nhưng nên thêm dòng code dưới đây vào trước dòng Activesheet.Protect ("1968") Chỉnh sửa lần cuối bởi điều hành viên: 16/10/07
Bạn MinhLev ơi khi chạy nó báo lỗi ngay câu lệnh bạn bảo thêm vào
Bạn MinhLev ơi khi chạy nó báo lỗi ngay câu lệnh bạn bảo thêm vào ANH TUẤN
Như vậy là trong file của bác đã bị protect rồi. Do vậy trước tiên bác hãy unprotect file đã (có thể thêm dòng code Activesheet.Unprotect("1968") vào ngay sau dòng khai báo Dim... hoặc Unprotect Sheet trong Tool cũng được).
Mình gửi ví dụ 2 File các bạn xem giúp.
Book1.xls làm theo cách của mình tất cả các sheet nếu ô không có công thức thì nhập bình thường và chỉ khóa bị khóa nếu bạn đặt công thức, giờ mình muốn thêm một tý nữa là dấu luôn công thức không hiện lên thanh Formula.
Theo chỉ dẫn bạn Minhlev thêm dòng lệnh " rng.FomulaHidden = True" nhưng khi chạy thì báo lỗi tại dòng này (file Book2.xls)
Nhờ các bạn giải hộ Chỉnh sửa lần cuối bởi điều hành viên: 16/10/07
Nguyên nhân là tại book2, sheet đã được protect rồi còn ô chứa công thức lại không được dấu công thức. Do vậy thêm dòng lệnh rng.FomulaHidden=True sẽ dẫn đến bị lỗi vì nó không thể xâm nhập vào những ô đã bị khoá để thực thi công việc của mình. Do vậy như tôi đã nói tại bài số 34, bác nên thêm dòng lệnh mở khoá cho sheet trước vòng lặp hoặc vào từng sheet và trên thanh menu chọn Tool/Unprotect Sheet để mở khoá sau đó kích đúp vào ô bất kỳ trong sheet --> Enter là OK (chỉ cần mở khoá 1 lần cho từng sheet có trong workbook).
EM hỏi
Private Sub Worksheet_Change(ByVal Target As Range)
[LEFT] [COLOR=red]On Error Resume Next[/COLOR]
ActiveSheet.Unprotect
[COLOR=red]Cells.Locked = False
[/COLOR]Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Selection.FormulaHidden = TrueSelection.Locked = True
ActiveSheet.ProtectRange("A1").Select
End Sub Code trên chạy rất tốt khi ta dùng cho 1 Sheet chưa có công thức. Nếu Sheet đã có công thức rồi mới dùng Code trên thì không có tác dụng khóa và dấu hàm. Bác nào chỉ dùm cách khóa và dấu hàm = VBA khi Sheet đã có công thức. |