xin giúp đỡ chặn code tự động chạy khi không cần thiết (1 người xem)

Liên hệ QC

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

langtuchungtinh360

Thành viên đã dừng hoạt động
Tham gia
7/10/13
Bài viết
1,062
Được thích
334
mọi người cho mình hỏi
mình có 1 đoạn code thế này
Option Explicit
Function CommPic(Pic As String, Cel As Range) As String
'CHENANH
On Error Resume Next
Application.ScreenUpdating = False
Dim mRng As Range
On Error Resume Next
Application.Volatile
Cel(1, 1).Comment.Delete
If Cel(1, 1).Comment Is Nothing Then Cel(1, 1).AddComment
Cel(1, 1).Comment.Text vbLf
Set mRng = Cel(1, 1).MergeArea
If mRng Is Nothing Then Set mRng = Cel(1, 1)
With Cel(1, 1).Comment.Shape
.Shadow.Visible = msoFalse
.Line.Visible = msoFalse
.AutoShapeType = msoShapeRectangle
.Left = mRng.Left: .Top = mRng.Top: .Visible = True
.Width = mRng.Width: .Height = mRng.Height
.Fill.UserPicture Pic
End With
Application.ScreenUpdating = True
On Error GoTo 0
End Function

mình chỉ cần nó chạy ở vài sheet thôi, chứ không chạy hết sheet. ví dụ như file mình gửi thì chỉ cần chạy code đó trên sheet DC NTCT NTBT còn các sheet kia không cần. mấy sheet kia không cần mà nó vẫn chạy nên làm cho tốc độ chạy code trở nên lâu hơn. mọi người giúp mình sửa lại thế nào để cho đoạn code trên chỉ chạy trong những sheet DC, NTCT, NTBT thôi nhé. mong được mọi người giúp chứ đừng mở file lên thấy lu bu đóng file luôn. ^^
http://www.mediafire.com/download/n4...2x/HosoKCS.rar
https://www.fshare.vn/file/GOSNMTZBA7TB
 
Lần chỉnh sửa cuối:
Bạn viết dưới dạng 1 hàm người dùng, nhưng lại làm những công việc của 1 macro là sao?

Bạn nên chuyển sang 1 macro có nhận tham biến; Khi đó muốn nó hoạt động ở khu vực nào mà chả được.
Ví dụ:
PHP:
SuB CommPic(Pic As String, Cel As Range) 


 End Sub

Còn bây giờ mà nó không chưỡi bạn là may lắm rồi còn gì!
 
Bạn viết dưới dạng 1 hàm người dùng, nhưng lại làm những công việc của 1 macro là sao?

Bạn nên chuyển sang 1 macro có nhận tham biến; Khi đó muốn nó hoạt động ở khu vực nào mà chả được.
Ví dụ:
PHP:
SuB CommPic(Pic As String, Cel As Range) 


 End Sub

Còn bây giờ mà nó không chưỡi bạn là may lắm rồi còn gì!
sửa giùm luôn đi bác. mình biết sửa thì còn hỏi làm gì. mà ai chửi cơ ?
code thì mình tìm trên diễn đàn chứ có viết ra đâu mà biết sửa.
 
Ý bác Hải Yến chửi ở đây nghĩa là code báo lỗi chứ không ai chửi cả. Câu lệnh gây chậm là Application.Volatile, bạn thử bỏ đi xem được không? Nếu không, code trên là của "người mà ai cũng biết là ai đấy", bạn thử nhờ trực tiếp xem.
 
Ý bác Hải Yến chửi ở đây nghĩa là code báo lỗi chứ không ai chửi cả. Câu lệnh gây chậm là Application.Volatile, bạn thử bỏ đi xem được không? Nếu không, code trên là của "người mà ai cũng biết là ai đấy", bạn thử nhờ trực tiếp xem.
cảm ơn bác. bỏ đi thì nó vẫn chạy tiếp tục vẫn quất cái code đó ít nhất là 3 lần rồi mới chạy tiếp. nên chả biết sao.
 
Chắc bạn cũng như tôi, hay ai đó khác,............và bữa giờ có xem qua, và tham gia 1 số topic của bạn, và thẳng thắng góp ý với bạn là:
1. Đã lập topic ..........thì ý chính ở đây là: 1 là chia sẽ, 2 là nhờ trợ giúp, ........3 trở lên có thể cái gì đó khác (ta không bàn)
2. Trường hợp của bạn ở đây là nhờ giúp.............
3. Cho dù bạn có tự viết, hay bạn copy của ai đó trên GPE...............thì làm sao người khác biết bạn là bạn đi copy hay bạn viết.......... Hơn ai hết bạn là người rõ nhất!
4. Và hôm giờ theo gõi topic của bạn...........thấy bạn có thái độ rất kỳ cục..........(đại khái là........mình biết mà còn hỏi làm gì, .hay gì gì đó...........)
http://www.giaiphapexcel.com/forum/...ỡ-file-VBA-chạy-chậm-với-giật-màn-hình
5. Đôi khi những ý đó là do bạn tính thẳng nên nói ngay.............nhưng như vậy sẽ làm cho ai đó (ai đó tham gia topic của bạn) sẽ có ác cảm,.........và chắc rằng họ sẽ bye bye bạn & không giúp bạn nữa........


Cho nên dù người ta nói gì.......thì mình cũng cẩn trọng...........và mình không biết mới đi nhờ giúp nên cho dù thế nào đi nũa cũng nhẹ nhàng và tôn trọng ai đó thì sẽ được trợ giúp & cho dù nó có làm mình khó chịu tí xíu!--=0--=0--=0--=0

Chúc bạn thành công! mai mắn!
cảm ơn góp ý của bạn nha. nói thật là mình không biết ăn nói, nghĩ sao nói vậy. lời thật mất lòng mà bác. sẽ cố gắng chỉnh sửa lại câu cú cho lịch sự.
bởi thế nên mấy câu hỏi của mình viết lằng nhằng mà có 1 nội dung à, nên người đọc có thể hơi khó hiểu. xin chân thành xin lỗi. mong mấy bác cố gắng hiểu và giúp mấy vấn đề của mình. chứ chạy chậm thế này thì in nguyên hạng mục chắc lâu chết.
 
PHP:
Option Explicit
Function CommPic(Pic As String, Cel As Range) As String
 'CHENANH '
1 On Error Resume Next
 Application.ScreenUpdating = False
 Dim mRng As Range
 'On Error Resume Next '              'Cau Lenh Này Là Thùa Vì Tren Da Có'
 Application.Volatile
 Cel(1, 1).Comment.Delete   'Cau Lenh Này Se Khong Bao Giò Duoc Thuc Hien Trong 1 Hàm Nguòi Dùng'
If Cel(1, 1).Comment Is Nothing Then Cel(1, 1).AddComment
Cel(1, 1).Comment.Text vbLf
Set mRng = Cel(1, 1).MergeArea
If mRng Is Nothing Then Set mRng = Cel(1, 1)
With Cel(1, 1).Comment.Shape
   .Shadow.Visible = msoFalse
   .Line.Visible = msoFalse
   .AutoShapeType = msoShapeRectangle
   .Left = mRng.Left: .Top = mRng.Top: .Visible = True
   .Width = mRng.Width: .Height = mRng.Height
        .Fill.UserPicture Pic
   End With
   Application.ScreenUpdating = True
  On Error GoTo 0
  End Function

Nhưng nhờ có lệnh mang số 1 mà nó sẽ bỏ qua các câu lệnh sai & tiếp tục đi đến câu lệnh không sai nào đó bên dưới.

Tóm lại bạn chả thể nào thực hiện hàm người dùng này vô đâu cả; & sự có mặt của nó trong các trang tính chỉ làm bạn hao fí thời gian mà thôi.
 
PHP:
Option Explicit
Function CommPic(Pic As String, Cel As Range) As String
 'CHENANH '
1 On Error Resume Next
 Application.ScreenUpdating = False
 Dim mRng As Range
 'On Error Resume Next '              'Cau Lenh Này Là Thùa Vì Tren Da Có'
 Application.Volatile
 Cel(1, 1).Comment.Delete   'Cau Lenh Này Se Khong Bao Giò Duoc Thuc Hien Trong 1 Hàm Nguòi Dùng'
If Cel(1, 1).Comment Is Nothing Then Cel(1, 1).AddComment
Cel(1, 1).Comment.Text vbLf
Set mRng = Cel(1, 1).MergeArea
If mRng Is Nothing Then Set mRng = Cel(1, 1)
With Cel(1, 1).Comment.Shape
   .Shadow.Visible = msoFalse
   .Line.Visible = msoFalse
   .AutoShapeType = msoShapeRectangle
   .Left = mRng.Left: .Top = mRng.Top: .Visible = True
   .Width = mRng.Width: .Height = mRng.Height
        .Fill.UserPicture Pic
   End With
   Application.ScreenUpdating = True
  On Error GoTo 0
  End Function

Nhưng nhờ có lệnh mang số 1 mà nó sẽ bỏ qua các câu lệnh sai & tiếp tục đi đến câu lệnh không sai nào đó bên dưới.

Tóm lại bạn chả thể nào thực hiện hàm người dùng này vô đâu cả; & sự có mặt của nó trong các trang tính chỉ làm bạn hao fí thời gian mà thôi.
nó áp dụng vào sheet DC NTVLDV NTCT NTBT đó bác. đâu phải là không dùng.
 
Chắc bạn & mọi người nên bắt đầu lại từ đầu vớ file này. Điều này giúp bạn đỡ xà quần trong mớ bòng bong này;

Nếu bạn đồng í ta sẽ cùng nhau thiết kế lại CSDL của bạn.

Để vậy, bạn nên đưa các trang tính dữ liệu ban đầu (dữ liệu nguồn) lên diễn đàn
Mọi người sẽ góp í cách tốt nhất để xử lí CSDL mới của bạn bài bản & chu toàn hơn.

Thân ái!
 
mọi người cho mình hỏi
mình có 1 đoạn code thế này
Option Explicit
Function CommPic(Pic As String, Cel As Range) As String
'CHENANH
..................
On Error GoTo 0
End Function

mình chỉ cần nó chạy ở vài sheet thôi, chứ không chạy hết sheet. ví dụ như file mình gửi thì chỉ cần chạy code đó trên sheet DC NTCT NTBT còn các sheet kia không cần. mấy sheet kia không cần mà nó vẫn chạy nên làm cho tốc độ chạy code trở nên lâu hơn. mọi người giúp mình sửa lại thế nào để cho đoạn code trên chỉ chạy trong những sheet DC, NTCT, NTBT thôi nhé. mong được mọi người giúp chứ đừng mở file lên thấy lu bu đóng file luôn. ^^
http://www.mediafire.com/download/n4...2x/HosoKCS.rar
https://www.fshare.vn/file/GOSNMTZBA7TB
Cá với bạn rằng: File của bạn chậm không phải do ComPic mà ra. Bạn có thể thử nghiệm bằng cách xóa thằng ComPic đi xem có nhanh hơn chút nào không
File của bạn như một đống hổn độn, toàn xài sự kiện Worksheet_Activate nên cứ chọn vào sheet nào là nó "lết" một hồi lâu
Nhìn vào "rừng" code thấy choáng quá! Không ai sửa nỗi cho bạn đâu!
--------------------------
Nếu không biết code thì cứ xài dạng bình thường đi (công thức thường) cho dễ bảo trì. Còn đã đụng đến code thì cái nào phải chắc ăn cái đó. Bạ đâu trên mạng có gì cứ "hốt" hết về xài.. lâu dần cái file sẽ biến thành đống rác là cái chắc
 
Chắc bạn & mọi người nên bắt đầu lại từ đầu vớ file này. Điều này giúp bạn đỡ xà quần trong mớ bòng bong này;

Nếu bạn đồng í ta sẽ cùng nhau thiết kế lại CSDL của bạn.

Để vậy, bạn nên đưa các trang tính dữ liệu ban đầu (dữ liệu nguồn) lên diễn đàn
Mọi người sẽ góp í cách tốt nhất để xử lí CSDL mới của bạn bài bản & chu toàn hơn.

Thân ái!
thì file gốc là nó đó bác. file để có dữ liệu điền vào chỉ là số liệu thép với khối lượng bê tông thôi.
 
Cá với bạn rằng: File của bạn chậm không phải do ComPic mà ra. Bạn có thể thử nghiệm bằng cách xóa thằng ComPic đi xem có nhanh hơn chút nào không
File của bạn như một đống hổn độn, toàn xài sự kiện Worksheet_Activate nên cứ chọn vào sheet nào là nó "lết" một hồi lâu
Nhìn vào "rừng" code thấy choáng quá! Không ai sửa nỗi cho bạn đâu!
--------------------------
Nếu không biết code thì cứ xài dạng bình thường đi (công thức thường) cho dễ bảo trì. Còn đã đụng đến code thì cái nào phải chắc ăn cái đó. Bạ đâu trên mạng có gì cứ "hốt" hết về xài.. lâu dần cái file sẽ biến thành đống rác là cái chắc
cảm ơn thầy ạ. thì mục đích của em là cho nó tự chạy luôn ấy. hễ chọn đến sheet nào là nó chạy sheet đó luôn. chứ nhiều nút bấm lu bu quá thầy ạ.
 
cảm ơn thầy ạ. thì mục đích của em là cho nó tự chạy luôn ấy. hễ chọn đến sheet nào là nó chạy sheet đó luôn. chứ nhiều nút bấm lu bu quá thầy ạ.

Tóm lại: Nếu mới học VBA thì nên hạn chế xài code sự kiện, bạn sẽ không khống chế nỗi đâu
 
Thi đó là file gốc đó bác. file để có dữ liệu điền vào chỉ là số liệu thép với khối lượng bê tông thôi.

Theo mình thì 1 file CSDL gồm 3 fần chính

a.) Dữ liệu đầu vào
b.) Các trang fụ trợ dùng để nhập liệu, chỉnh sửa dữ liệu, thay mới hay xóa dữ liệu cũ;
c.) Các báo cáo (dể in ra hay để xem mà thôi)

Trong các fần đó, chỉ các trang liên quan đến c.) mới cần định dạng, diêm dúa cho bắt mắt; Các trang cón lại, nhất là các trang dữ liệu càng thô càng tốt
Thô cỡ này nè:
Dòng đầu là tên các trường; Tên các trường không nên có dấu tiếng Việt, Nên viết liền; Ví dụ như:
[Ng_Sinh], [NgVoCQ], [Dien_Giai], [NoiCuTru],. . . . .
(Cái này là do tiếng Việt nước ta đang mạnh ai nấy xài nên fải làm vậy)

Mình không tưởng tượng nổi:
Các trang tính chứa dữ liệu lại fải dịnh dạng lại cứ mỗi lần mở nó ra(!)
Thậm chí ta không nên trực tiếp làm viec với nó nữa kia, làm việc với CSDL thông qua các form fụ trợ ngõ hầu giảm thiểu rủi ro cho CSDL đáng quí của bạn.

CSDL của bạn giờ thực sự chả biết bắt đầu từ đâu nữa.
Nếu bạn vẫn giữ í tưởng xậy dựng CSDL như vậy thì chúng ta tạm biệt nhau đi thì hơn!
 
Theo mình thì 1 file CSDL gồm 3 fần chính

a.) Dữ liệu đầu vào
b.) Các trang fụ trợ dùng để nhập liệu, chỉnh sửa dữ liệu, thay mới hay xóa dữ liệu cũ;
c.) Các báo cáo (dể in ra hay để xem mà thôi)

Trong các fần đó, chỉ các trang liên quan đến c.) mới cần định dạng, diêm dúa cho bắt mắt; Các trang cón lại, nhất là các trang dữ liệu càng thô càng tốt
Thô cỡ này nè:
Dòng đầu là tên các trường; Tên các trường không nên có dấu tiếng Việt, Nên viết liền; Ví dụ như:
[Ng_Sinh], [NgVoCQ], [Dien_Giai], [NoiCuTru],. . . . .
(Cái này là do tiếng Việt nước ta đang mạnh ai nấy xài nên fải làm vậy)

Mình không tưởng tượng nổi:
Các trang tính chứa dữ liệu lại fải dịnh dạng lại cứ mỗi lần mở nó ra(!)
Thậm chí ta không nên trực tiếp làm viec với nó nữa kia, làm việc với CSDL thông qua các form fụ trợ ngõ hầu giảm thiểu rủi ro cho CSDL đáng quí của bạn.

CSDL của bạn giờ thực sự chả biết bắt đầu từ đâu nữa.
Nếu bạn vẫn giữ í tưởng xậy dựng CSDL như vậy thì chúng ta tạm biệt nhau đi thì hơn!
vẫn chưa hiểu cho lắm. thì trong file đó là có cả phần a.) b.) c.) của bác luôn ấy. phần a.) là mấy trang SoLieu..... đó bác. cũng tiên quyết là b.) luôn. còn c.) là mấy sheet viết tắt chữ in hoa không ấy.
nếu file lằng nhằng thì bác có thể góp ý hướng đi để làm file tốt hơn được không bác? hướng của mình thì là vậy. làm vậy thôi. chứ tới lúc nhìn lại có nhiều công thức trong bảng tính nhìn cũng không hiểu gì luôn ấy.
còn file nó chậm là do code fix chiều cao dòng. vậy còn cách nào fix nhanh hơn không ạ! hay là làm thêm 1 nút để điều khiển cho nó fix sau bác nhỉ.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom