Chỉ cho nhập liệu bằng form trong vùng chỉ định (1 người xem)

Liên hệ QC

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

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
E có 1 câu hỏi cần giúp đỡ là: Có code nào chỉ cho nhập liệu từ vùng [A1:M400] bằng form, không cho nhập liệu trực tiếp trên sheet mà chỉ có thể view thôi. Ngoài vùng này thì có thể nhập liệu trực tiếp trên sheet
 
Bạn có thể dùng worksheet function ở dưới đây với target là vùng mà bạn muốn nhập dữ liệu bằng form. Khi cell trong vùng được lựa chọn thì bạn kích hoạt form đăng nhập dữ liệu.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


End Sub
 
Upvote 0
Bạn có thể dùng worksheet function ở dưới đây với target là vùng mà bạn muốn nhập dữ liệu bằng form. Khi cell trong vùng được lựa chọn thì bạn kích hoạt form đăng nhập dữ liệu.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


End Sub
Cái này e biết CEO76, nhưng khi mình bấm chọn vùng chỉ định chỉ để view thôi mà nhảy form ra sao xem nên không được bạn.Ý mình muốn lock vùng chỉ định chỉ cho nhập bằng form, nhưng khi bấm vào xem vẫn được nhưng không cho nhập.
 
Lần chỉnh sửa cuối:
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if target.Address = " Vùng muốn nhập dữ liệu bằng form" then "Kích hoạt form"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if target.Address = " Vùng muốn nhập dữ liệu bằng form" then "Kích hoạt form"
End Sub
CODE CỦA MÌNH NHƯ SAU MÀ THẤY VÀO SHEET NHẬP VẪN NHẬP BÌNH THƯỜNG BÁC.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = [B3:M400] Then MICRO_FORM.Show
End Sub
 
Upvote 0
E có 1 câu hỏi cần giúp đỡ là: Có code nào chỉ cho nhập liệu từ vùng [A1:M400] bằng form, không cho nhập liệu trực tiếp trên sheet mà chỉ có thể view thôi. Ngoài vùng này thì có thể nhập liệu trực tiếp trên sheet

code của Sheet

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    Set rng = Intersect(Target, [A1:M400])
    If Not rng Is Nothing Then
        If Not UserForm1.Visible Then
            Application.EnableEvents = False
            rng.ClearContents
            Application.EnableEvents = True
        End If
    End If
End Sub

Cũng có thể dùng một flag nào đó, một cái gì đó để nhớ trạng thái "cho phép/không cho phép" rồi khi mở Form thì thiết lập "cho phép", khi đóng Form thì thiết lập "không cho phép". Trong Worksheet_Change thì kiểm tra flag đó để quyết định.

Vd.
trong module

Mã:
Public ChangeAllow As Boolean

code UserForm

Mã:
Private Sub UserForm_Initialize()
    ChangeAllow = True
End Sub

Private Sub UserForm_Terminate()
    ChangeAllow = False
End Sub

code Sheet

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    Set rng = Intersect(Target, [A1:M400])
    If Not rng Is Nothing Then
        If Not ChangeAllow Then
            Application.EnableEvents = False
            rng.ClearContents
            Application.EnableEvents = True
        End If
    End If
End Sub
 
Upvote 0
code của Sheet

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    Set rng = Intersect(Target, [A1:M400])
    If Not rng Is Nothing Then
        If Not UserForm1.Visible Then
            Application.EnableEvents = False
            rng.ClearContents
            Application.EnableEvents = True
        End If
    End If
End Sub

Cũng có thể dùng một flag nào đó, một cái gì đó để nhớ trạng thái "cho phép/không cho phép" rồi khi mở Form thì thiết lập "cho phép", khi đóng Form thì thiết lập "không cho phép". Trong Worksheet_Change thì kiểm tra flag đó để quyết định.

Vd.
trong module

Mã:
Public ChangeAllow As Boolean

code UserForm

Mã:
Private Sub UserForm_Initialize()
    ChangeAllow = True
End Sub

Private Sub UserForm_Terminate()
    ChangeAllow = False
End Sub

code Sheet

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    Set rng = Intersect(Target, [A1:M400])
    If Not rng Is Nothing Then
        If Not ChangeAllow Then
            Application.EnableEvents = False
            rng.ClearContents
            Application.EnableEvents = True
        End If
    End If
End Sub
Được rồi cảm ơn Siwtom nhiều, ah mà mình đặt cho workbook_sheetchange thì báo lỗi không được, vậy nhiều sheet thì phải đặt mỗi sheet 1 code.
 
Lần chỉnh sửa cuối:
Upvote 0
Ban xem file mình làm đúng không sao không chạy.

Trong bài #1 bạn viết: "Có code nào chỉ cho nhập liệu từ vùng [A1:M400] bằng form, không cho nhập liệu trực tiếp trên sheet"
Code tôi đưa chả đã làm được việc cấm nhập trực tiếp là gì?

Còn chuyện viết code nhập liệu từ Form xuống sheet thì liên quan gì tới chủ đề này? Bạn lập chủ đề mới để hỏi nhé.
Mà việc là của bạn, người khác bỏ thời gian ra giúp là đủ rồi, đừng để người ta mất thêm thời gian không đáng mất.
Trong bài #7 bạn viết: "thì báo lỗi không được". Trong bài #9: "sao không chạy"

"Báo lỗi" và "không chạy" chúng có thể nói về hàng ngàn thứ, và chính vì vậy chúng không nói về cái gì cụ thể cả. "Báo lỗi"? Lỗi gì? Đã báo lỗi thì chắc chắn có nội dung lỗi. Sao bạn không ghi ra? "Không chạy" là sao? Là bấm nút gì đó mà thấy "im re"? Là Excel bị giết đột ngột? Là nhẩy ra cửa sổ có nội dung là "xyz"? Là kết quả không đúng như dự định? Mà chúng sẩy ra khi nào? Hãy liệt kê ra hàng loạt thao tác để "đi tới" cái gọi là "Báo lỗi", "không chạy". Nếu không chạy có nghĩa là kết quả sai thì ghi rõ, vd.: khi thực hiện một loạt các thao tác từ a đến z thì có kết quả "abc" ở chỗ này chỗ này nhưng kết quả đúng phải là "xyz".

Bạn là người duy nhất bằng cách giải thích chi tiết có thể tiệt kiệm cho người giúp mình những thời gian không đáng mất thêm. Vậy sao bạn không tiết kiệm cho họ cái thời gian đó?
Không ai muốn đọc cả rừng code, thử nghiệm với nhiều thao tác nhập liệu để dò và đoán cái "báo lỗi", "không chạy" của bạn nó là gì.

Vài lời để bạn rút kinh nghiệm. Bạn nên nhớ là nếu bạn nói không rõ thì rất có thể mọi người sẽ bỏ qua. Trên GPE có nhiều người thích chơi trò "đoán ý đồng đội" nhưng trong đó không có tôi.

Về nhập liệu thì tôi cũng đã thử xem mặt mũi như thế nào bằng cách nhập những hichic, hehe vào các Textbox rồi nhấn "nhap". Ngay dòng thứ hai đã có If Textbox_mahang = "" trong khi đó trên Form làm quái gì có textbox Textbox_mahang. Tôi dừng ngay.

Mà tôi đã nói rồi. Vấn đề cấm nhập trực tiếp trên sheet đã giải quyết được. Vấn đề nhập liệu không liên quan gì tới chủ đề. Lập chủ đề mới để hỏi.
 
Upvote 0
Mình hỏi bạn vấn đề khóa nhập liệu trực tiếp thôi, vần đề trong form là mình đang làm dở đó chứ không phải hỏi trong chủ đề này đâu bạn, xin lỗi vì đã làm phiền bạn.Cảm ơn bạn đã nhiệt tình giúp đỡ.

- Nếu để "Private Sub Workbook_SheetChange" thì sheet nào cũng bị ảnh hưởng code, mình chỉ muốn 1 số sheet chỉ định không cho nhập trực tiếp thôi.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom