Giúp sửa code để chỉ chạy trên file chứa code (1 người xem)

Liên hệ QC

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

hunglam123

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
31/3/20
Bài viết
180
Được thích
43
Chào cả Nhà GPE. Em có dùng code sau đế nhấn Nút Delete xóa 1 hàng 4 cột cùng lúc. Code thì chạy Ok. Nhưng chỉ đúng khi em mở đúng 1 file này trên máy tính. Còn em mở thêm file khác ( Không đóng file chạy code ) thì khi em nhấn Delete thì code nó cũng xóa 1 hàng 4 cột .
Em muốn code chỉ hoạt động trên file chứa code khi trên máy tính có nhiều file, Các file khác nhấn Delete thì như mặc định chỉ xóa mỗi ô đang chọn
Em xin chân thành cảm ơn


Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name = "data" Then
                If Not Intersect(Target, Range("A1:D100")) Is Nothing Then
                    Application.OnKey "{DELETE}", "chaycode"  ' nhan delete xoa dong
                Else
                    Application.OnKey "{DELETE}"
                End If
                
            
Else
     Application.OnKey "{DELETE}"
End If
End Sub

Private Sub Worksheet_Deactivate()
Application.OnKey "{DELETE}"
End Sub


Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
 
Bạn sửa
Mã:
Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
thành
Mã:
Sub chaycode()
Dim i As Long
with thisworkbook.activesheet
i = .Selection.Row
.Range("A" & i & ":D" & i).ClearContents
end with
End Sub
 
Upvote 0
Chào cả Nhà GPE. Em có dùng code sau đế nhấn Nút Delete xóa 1 hàng 4 cột cùng lúc. Code thì chạy Ok. Nhưng chỉ đúng khi em mở đúng 1 file này trên máy tính. Còn em mở thêm file khác ( Không đóng file chạy code ) thì khi em nhấn Delete thì code nó cũng xóa 1 hàng 4 cột .
Em muốn code chỉ hoạt động trên file chứa code khi trên máy tính có nhiều file, Các file khác nhấn Delete thì như mặc định chỉ xóa mỗi ô đang chọn
Em xin chân thành cảm ơn


Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name = "data" Then
                If Not Intersect(Target, Range("A1:D100")) Is Nothing Then
                    Application.OnKey "{DELETE}", "chaycode"  ' nhan delete xoa dong
                Else
                    Application.OnKey "{DELETE}"
                End If
               
           
Else
     Application.OnKey "{DELETE}"
End If
End Sub

Private Sub Worksheet_Deactivate()
Application.OnKey "{DELETE}"
End Sub


Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
Nếu có file hy vọng sẽ giúp được.
Bạn sửa
Mã:
Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
thành
Mã:
Sub chaycode()
Dim i As Long
with thisworkbook.activesheet
i = .Selection.Row
.Range("A" & i & ":D" & i).ClearContents
end with
End Sub
Tôi thấy cách này cũng chưa ổn, đang ở workbook khác nhấn phím delete nó vẫn chạy code (Mặc dù nó tác động lên Thisworkbook)
 
Upvote 0
Đúng rồi bác @giaiphap , sửa lại thành
Mã:
Sub chaycode()
Dim i As Long
if not thisworkbook is activeworkbook then exit sub
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
 
Upvote 0
Đúng rồi bác @giaiphap , sửa lại thành
Mã:
Sub chaycode()
Dim i As Long
if not thisworkbook is activeworkbook then exit sub
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
Tôi thấy cũng chưa ổn, sang workbook khác nhấn Delete không có tác dụng xóa dữ liệu trong ô đang chọn. Tôi muốn thấy file vì có lẽ dùng ClassModule sẽ ổn hơn.
 
Upvote 0
Xin lỗi các bác, do không có file nên mình chỉ đoán. Thấy sai nhiều quá nên mới tạo file thử. Chỉ thêm code workbook là được:
Code trên sheet data:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name = "data" Then
                If Not Intersect(Target, Range("A1:D100")) Is Nothing Then
                    Application.OnKey "{DELETE}", "chaycode"  ' nhan delete xoa dong
                Else
                    Application.OnKey "{DELETE}"
                End If
                
            
Else
     Application.OnKey "{DELETE}"
End If
End Sub

Private Sub Worksheet_Deactivate()
Application.OnKey "{DELETE}"
End Sub
Code trên workbook:
Mã:
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.OnKey "{DELETE}"
End Sub
Code module
Mã:
Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
 
Upvote 0
Xin lỗi các bác, do không có file nên mình chỉ đoán. Thấy sai nhiều quá nên mới tạo file thử. Chỉ thêm code workbook là được:
Code trên sheet data:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Name = "data" Then
                If Not Intersect(Target, Range("A1:D100")) Is Nothing Then
                    Application.OnKey "{DELETE}", "chaycode"  ' nhan delete xoa dong
                Else
                    Application.OnKey "{DELETE}"
                End If
               
           
Else
     Application.OnKey "{DELETE}"
End If
End Sub

Private Sub Worksheet_Deactivate()
Application.OnKey "{DELETE}"
End Sub
Code trên workbook:
Mã:
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.OnKey "{DELETE}"
End Sub
Code module
Mã:
Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
Giả sử file chứa code là a, bây giờ ta mở file a và file b. Chọn file a, chọn sheet data, chọn ô A1 (Ô này có sẳn dữ liệu nhé), chọn file b, nhấn Delete (Chạy ngon), chọn lại file a, nhấn Delete...
 
Upvote 0
Để hoàn chỉnh có lẽ cần phải sửa cả loạt auto_open, workbook_windowactivate, có thể cả beforeclose nữa. Mình thì ghét mấy cái thủ tục sự kiện nên chẳng mấy khi sờ đến nó.
 
Upvote 0
Giả sử file chứa code là a, bây giờ ta mở file a và file b. Chọn file a, chọn sheet data, chọn ô A1 (Ô này có sẳn dữ liệu nhé), chọn file b, nhấn Delete (Chạy ngon), chọn lại file a, nhấn Delete...
rất mong anh hãy giúp đỡ. Mình mò từ hôm qua đến giờ vẫn chưa được. Mà tại sao mình làm file này mà file kia là có tác dụng là sao nhĩ
Bài đã được tự động gộp:

vẫn chưa có ai làm được anh ạ. Mong anh ra tay giúp đỡ
Bài đã được tự động gộp:

Bạn sửa
Mã:
Sub chaycode()
Dim i As Long
i = Selection.Row
Range("A" & i & ":D" & i).ClearContents
End Sub
thành
Mã:
Sub chaycode()
Dim i As Long
with thisworkbook.activesheet
i = .Selection.Row
.Range("A" & i & ":D" & i).ClearContents
end with
End Sub
cảm ơn bạn. Vẫn chưa được bạn ơi
 
Upvote 0
rất mong anh hãy giúp đỡ. Mình mò từ hôm qua đến giờ vẫn chưa được. Mà tại sao mình làm file này mà file kia là có tác dụng là sao nhĩ
Bài đã được tự động gộp:


vẫn chưa có ai làm được anh ạ. Mong anh ra tay giúp đỡ
Bài đã được tự động gộp:


cảm ơn bạn. Vẫn chưa được bạn ơi
Bạn khai báo thêm một biến:
Public MyBook As String

Sau đó tại thủ tục chaycode thêm điều kiện:
If ActiveWorkbook.Name = MyBook Then

Và them một sự kiện Workbook:
Private Sub Workbook_Open()
MyBook = ThisWorkbook.Name
End Sub

thì code sẽ chỉ chạy trên file chứa code
 
Upvote 0
Bạn khai báo thêm một biến:
Public MyBook As String

Sau đó tại thủ tục chaycode thêm điều kiện:
If ActiveWorkbook.Name = MyBook Then

Và them một sự kiện Workbook:
Private Sub Workbook_Open()
MyBook = ThisWorkbook.Name
End Sub

thì code sẽ chỉ chạy trên file chứa code
Bạn chọn sheet data, chọn ô A1 (ô này có dữ liệu nhé), save file, đóng file. Mở file lên (không nhấn gì cả nhé), bây giờ nhấn delete...
Khi giúp cho chủ topic này thì phải suy nghĩ kỷ nhé, chủ topic này khó tính lắm. Code phải hoàn hảo tuyệt đối.
 
Upvote 0
Bạn chọn sheet data, chọn ô A1 (ô này có dữ liệu nhé), save file, đóng file. Mở file lên (không nhấn gì cả nhé), bây giờ nhấn delete...
Khi giúp cho chủ topic này thì phải suy nghĩ kỷ nhé, chủ topic này khó tính lắm. Code phải hoàn hảo tuyệt đối.
Hihi. Quên nói vụ code chỉ có tác dụng sau khi đóng và chạy lại. Dù sao không đến nỗi bạn ấy không biết điều đó, nhỉ?
 
Upvote 0
Giải pháp nhanh gọn nhất, là tắt excel khởi động lại và mở file mới là yên tâm không có code nào chạy được
Nếu làm code cũng theo hướng tương tự
(trả lời riêng cho chủ topic)
 
Upvote 0
Chào cả Nhà GPE. Em có dùng code sau đế nhấn Nút Delete xóa 1 hàng 4 cột cùng lúc. Code thì chạy Ok. Nhưng chỉ đúng khi em mở đúng 1 file này trên máy tính. Còn em mở thêm file khác ( Không đóng file chạy code ) thì khi em nhấn Delete thì code nó cũng xóa 1 hàng 4 cột .
Em muốn code chỉ hoạt động trên file chứa code khi trên máy tính có nhiều file, Các file khác nhấn Delete thì như mặc định chỉ xóa mỗi ô đang chọn
Em xin chân thành cảm ơn

---------

Bạn thử code dưới cho Workbook

---------
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim I As Boolean
  On Error Resume Next
  I = Not Intersect(Selection, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  Call SetKey(I)
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Dim I As Boolean
  On Error Resume Next
  I = Not Intersect(Target, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  Call SetKey(I)
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  Dim I As Boolean
  On Error Resume Next
  If Wn.Caption Like ThisWorkbook.Name & " *" Then
    I = Not Intersect(Selection, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  End If
  Call SetKey(I)
End Sub
Private Sub SetKey(I As Boolean)
  If Not I Then
      Application.OnKey "{DELETE}"
  Else
      Application.OnKey "{DELETE}", "'" & ThisWorkbook.Name & "'!chaycode"
  End If
End Sub
 
Upvote 0
Giải pháp nhanh gọn nhất, là tắt excel khởi động lại và mở file mới là yên tâm không có code nào chạy được
Nếu làm code cũng theo hướng tương tự
(trả lời riêng cho chủ topic)
Bạn ơi, bạn chạy thử file của bạn chủ topic rồi mới thấy. Sau khi code đã vào trạng thái chờ, bạn mở bất kỳ file nào ra, bấm phím Delete thì khối A&dòng hiện hành: D&Dòng hiện hành của vùng A1:D100 của sheet hiện hành (của file mới mở đó) cũng bị xóa sạch, trong khi bạn ấy chỉ muốn code chỉ tác dụng với sheet data của file chứa code của bạn ấy thôi. Thế bạn ấy mới nhờ giúp đấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Giải pháp nhanh gọn nhất, là tắt excel khởi động lại và mở file mới là yên tâm không có code nào chạy được
Nếu làm code cũng theo hướng tương tự
(trả lời riêng cho chủ topic)
trả lời như bạn thế mình lên đây hỏi làm gì. vấn đề là lúc làm việc là mở nhiều file , mà mình chỉ muốn Code chĩ chạy file có code thôi. Chẳng lẻ chỉ mở đúng 1 file thôi hả.
 
Upvote 0
---------

Bạn thử code dưới cho Workbook

---------
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim I As Boolean
  On Error Resume Next
  I = Not Intersect(Selection, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  Call SetKey(I)
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Dim I As Boolean
  On Error Resume Next
  I = Not Intersect(Target, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  Call SetKey(I)
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  Dim I As Boolean
  On Error Resume Next
  If Wn.Caption Like ThisWorkbook.Name & " *" Then
    I = Not Intersect(Selection, ThisWorkbook.Sheets("data").Range("A1:D100")) Is Nothing
  End If
  Call SetKey(I)
End Sub
Private Sub SetKey(I As Boolean)
  If Not I Then
      Application.OnKey "{DELETE}"
  Else
      Application.OnKey "{DELETE}", "'" & ThisWorkbook.Name & "'!chaycode"
  End If
End Sub
Mở file khác lên nó vẫn áp dụng code luôn a. Em chỉ muốn file nào có code thì áp dụng file đó. Các file còn lại Như bình thường
Bài đã được tự động gộp:

Bạn ơi, bạn chạy thử file của bạn chủ topic rồi mới thấy. Sau khi code đã vào trạng thái chờ, bạn mở bất kỳ file nào ra, bấm phím Delete thì khối A&dòng hiện hành: D&Dòng hiện hành của vùng A1:D100 của sheet hiện hành (của file mới mở đó) cũng bị xóa sạch, trong khi bạn ấy chỉ muốn code chỉ tác dụng với sheet data của file chứa code của bạn ấy thôi. Thế bạn ấy mới nhờ giúp đấy.
đúng rồi bạn. bạn đó trả lời tắt đi mở lại. thì mình cần gì lên đây hỏi nữ chứ. trả lời như Muối bỏ Biển
Bài đã được tự động gộp:

Bạn khai báo thêm một biến:
Public MyBook As String

Sau đó tại thủ tục chaycode thêm điều kiện:
If ActiveWorkbook.Name = MyBook Then

Và them một sự kiện Workbook:
Private Sub Workbook_Open()
MyBook = ThisWorkbook.Name
End Sub

thì code sẽ chỉ chạy trên file chứa code
bạn cho mình Code hoàn chỉnh cái
Bài đã được tự động gộp:

Bạn chọn sheet data, chọn ô A1 (ô này có dữ liệu nhé), save file, đóng file. Mở file lên (không nhấn gì cả nhé), bây giờ nhấn delete...
Khi giúp cho chủ topic này thì phải suy nghĩ kỷ nhé, chủ topic này khó tính lắm. Code phải hoàn hảo tuyệt đối.
Test rất kỷ trong phòng thí nghiệm, tât cả mọi tình huống, phải chuẩn xác 100% thì mới gọi code Đúng, còn 99.9 % cũng chưa được Duyệt
 
Upvote 0
Test rất kỷ trong phòng thí nghiệm, tât cả mọi tình huống, phải chuẩn xác 100% thì mới gọi code Đúng, còn 99.9 % cũng chưa được Duyệt
Tôi biết bạn rất khó nên tôi không dám viết code, sợ bị phán một câu... Nói tóm lại vụ này không dùng ClassModule thì code hơi bị khó. Lót dép ngồi chờ các thành viên khác viết code (chờ sung rụng vậy) xem học hỏi. Tất cả những code trên không hài lòng được cái nào cả.
 
Upvote 0
Tôi biết bạn rất khó nên tôi không dám viết code, sợ bị phán một câu... Nói tóm lại vụ này không dùng ClassModule thì code hợi bị khó. Lót dép ngồi chờ các thành viên khác viết code (chờ sung rụng vậy) xem học hỏi. Tất cả những code trên không hài lòng được cái nào cả.
có đạt yêu cầu đâu anh. Test rất nghiêm nghặt thi chỉ 1 sai xót là loại bỏ ngay lập tức
 
Upvote 0
Lúc đầu chưa nhận ra, đến khi nhận ra thì...
Chỉ riêng cái project ấy mới có những yêu cầu thuộc về thế kỷ 22 thôi.
Tư duy tiền bất kiến cổ nhân, hậu bất tri lai giả mờ.

Theo tôi biết thì người đủ sức cung ứng nhu cầu với thớt đã ra bài rồi. Cứ để họ đối đáp với nhau, mình ngồi uống rượu xem hoa nở.
 
Upvote 0
Dĩ nhiên, nhưng chắc đợi sung rụng.
Sung thể nào cũng rụng. Nhơn vật tôi nói là dân cự phách.
Thứ nhất: theo tôi biết thì thớt khớp cơ nhơn vật này, không dám nói chuyện kiểu như nói với bạn đâu.
Thứ hai: nhơn vật này lỡ phóng lao rồi, không thể bỏ ngang đâu. Quê mặt.
 
Upvote 0
Mở file khác lên nó vẫn áp dụng code luôn a. Em chỉ muốn file nào có code thì áp dụng file đó. Các file còn lại Như bình thường
Bài đã được tự động gộp:


đúng rồi bạn. bạn đó trả lời tắt đi mở lại. thì mình cần gì lên đây hỏi nữ chứ. trả lời như Muối bỏ Biển
Bài đã được tự động gộp:


bạn cho mình Code hoàn chỉnh cái
Bài đã được tự động gộp:


Test rất kỷ trong phòng thí nghiệm, tât cả mọi tình huống, phải chuẩn xác 100% thì mới gọi code Đúng, còn 99.9 % cũng chưa được Duyệt

Tại ThisWorkbook thêm sự kiện Open:

Private Sub Workbook_Open()
MyBook = ThisWorkbook.Name
End Sub


Tại Module1:

Public MyBook As String

Sub chaycode()
Dim i As Long
If ActiveWorkbook.Name = MyBook Then
i = Selection.Row
Range("A" & i & ": D" & i).ClearContents 'Chỗ ": D" phải viết liền nhé. Trong đây viết liền nó thành :D (Mặt cười)
End If
End Sub


thế thôi

Cần thiết thì bạn tải luôn cái file ví dụ này về chạy thử
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tại ThisWorkbook thêm sự kiện Open:

Private Sub Workbook_Open()
MyBook = ThisWorkbook.Name
End Sub


Tại Module1:

Public MyBook As String

Sub chaycode()
Dim i As Long
If ActiveWorkbook.Name = MyBook Then
i = Selection.Row
Range("A" & i & ": D" & i).ClearContents 'Chỗ ": D" phải viết liền nhé. Trong đây viết liền nó thành :D (Mặt cười)
End If
End Sub


thế thôi

Cần thiết thì bạn tải luôn cái file ví dụ này về chạy thử


Test rồi. Mở đúng 1 file này thì ok. Mở thêm 1 file khác dạng đuôi khác XLSB thì nhấn Delete hết được luôn
Bài đã được tự động gộp:

Sung thể nào cũng rụng. Nhơn vật tôi nói là dân cự phách.
Thứ nhất: theo tôi biết thì thớt khớp cơ nhơn vật này, không dám nói chuyện kiểu như nói với bạn đâu.
Thứ hai: nhơn vật này lỡ phóng lao rồi, không thể bỏ ngang đâu. Quê mặt.
Nay lên "
Chuyên gia GPE
Thì thử trổ tài xem cái, Chứ toàn nghe nói chứ không thấy code gì hết
 
Upvote 0
...Thì thử trổ tài xem cái, Chứ toàn nghe nói chứ không thấy code gì hết
Có tài mà ngu để cho thiên hạ khích tướng thì đó là hạng tài lọt.
Muốn code thì mướn thiên hạ làm giùm cho cái COM bằng code xê cọng cọng gì đó. Tiền bạc tỷ chỉ thấy khoe sắm xe mới, project thì nhờ làm code chùa.
 
Upvote 0
Test rồi. Mở đúng 1 file này thì ok. Mở thêm 1 file khác dạng đuôi khác XLSB thì nhấn Delete hết được luôn
Nhấn delete hết được luôn nghĩa là sao, tôi không hiểu? Như vậy là code đã đúng ý bạn hay là không đúng? Tôi mở file khác lên thì bấm delete thì xoá được đúng ô hiện hành.
 
Upvote 0
Nhấn delete hết được luôn nghĩa là sao, tôi không hiểu? Như vậy là code đã đúng ý bạn hay là không đúng? Tôi mở file khác lên thì bấm delete thì xoá được đúng ô hiện hành.
Bạn sẽ không bao giờ thỏa cho người hỏi được đâu:= Vô ích thôi!
$$$$@
 
Upvote 0

File đính kèm

Upvote 0
Bạn sẽ không bao giờ thỏa cho người hỏi được đâu:= Vô ích thôi!
$$$$@
Sáng nay thì mới thấy topic của bạn.
https://www.giaiphapexcel.com/diendan/threads/1-câu-hỏi-khá-đơn-giản-không-có-gì-cao-siêu-mà-hết-diễn-đàn-không-ai-làm-được.149982/

Câu hỏi của bạn đúng là không khó nhưng mà cái cách bạn hỏi thì người khác thật sự ko muốn giúp, mặc dù nhiều người đã có câu trả lời. File này tôi không chắc là nó đúng đâu nhưng bạn cứ kiểm tra thử đi nhé!
Chắc file bạn chạy đúng rồi. Chỉ cần cái sự kiện Workbook_Deactivate() thôi là chạy ổn.
 
Upvote 0
...Câu hỏi của bạn đúng là không khó nhưng mà cái cách bạn hỏi thì người khác thật sự ko muốn giúp, mặc dù nhiều người đã có câu trả lời. File này tôi không chắc là nó đúng đâu nhưng bạn cứ kiểm tra thử đi nhé!
Hồi nào tới giờ người ta vẫn làm vậy.
Mục đích cuối cùng của người ta là lấy kết quả chứ đâu phải học cách giao tế, bạn giải thích cái này như trò đùa con nít thôi.

Rốt cuộc thì vấn đề cũng giải quyết xong. Còn được tha hồ chê đầu này, lên giọng đầu kia người nữa.
Ngoài GPE, còn nơi đâu sẵn sàng làm mọi không công như vầy?
 
Upvote 0

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

Back
Top Bottom