Cho mình hỏi về VBA (1 người xem)

Liên hệ QC

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

tu205489039

Thành viên hoạt động
Tham gia
14/12/14
Bài viết
118
Được thích
12
Giới tính
Nam
Mọi người ơi, cho mình hỏi chút, mình có 1 đoạn code. khi mình chạy thì phải sang sheet khác rồi về lại sheet ban đầu nó mới update dữ liệu. Có cách nào để chỉ cần trong sheet hiện hành thay đổi thì nó sẽ tự cập nhật luôn không mọi người.
Như trong file mình load, chỉ cần xóa chữ A là nó ẩn dòng 9 trở đi. Mong mọi người giúp đỡ, mình xin cảm ơn!
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A9:A42]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Next Rng
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Bạn ghép vào sự kiện
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
.....................................
End Sub
Thử xem sao. Nhưng mỗi lần thay đổi dữ liệu nó lại chạy cũng phiền toái không ít nhỉ.
 
Upvote 0
mình có add như bạn nói mà hình như nó không chạy được thì phải.
Mà có cách nào cho đoạn code VBA nó chạy nhanh hơn không bạn, mình thấy những file nặng, nó quay cũng phải 3 4 giây mới hide xong
 

File đính kèm

Upvote 0
mình có add như bạn nói mà hình như nó không chạy được thì phải.
Mà có cách nào cho đoạn code VBA nó chạy nhanh hơn không bạn, mình thấy những file nặng, nó quay cũng phải 3 4 giây mới hide xong
Thế thì làm sao nó chạy được bạn. Đưa Code vào trong sự kiện đó chứ
 

File đính kèm

Upvote 0
à, mình hiểu rồi, cảm ơn bạn nhiều nhe
 
Upvote 0
Thế thì làm sao nó chạy được bạn. Đưa Code vào trong sự kiện đó chứ
khi dùng sự kiện chạy code phải chọn đúng loại sự kiện và giới hạn vùng địa chỉ sự kiện sẽ làm code chạy, nếu không thì code chạy lung tung làm chậm file(tìm đọc trên diễn đàn)
số lần làm thay đổi bảng tính càng nhiều thì code càng chạy chậm, phải tìm cách gộp các thao tác giống nhau thành 1 thao tác nếu được. test thử
Mã:
Sub Test()
  Dim Rng As Range, UnionRng As Range
  Application.ScreenUpdating = False
  tg = Timer
  [A9:A42000].EntireRow.Hidden = False
  For Each Rng In [A9:A42000]
    Rng.EntireRow.Hidden = Rng = ""
  Next Rng
  [a1] = Timer - tg
'*************
  tg = Timer
  [A9:A42000].EntireRow.Hidden = False
  For Each Rng In [A9:A42000]
    If Rng = "" Then
      If UnionRng Is Nothing Then
        Set UnionRng = Rng
      Else
        Set UnionRng = Union(UnionRng, Rng)
      End If
    End If
  Next Rng
  If Not UnionRng Is Nothing Then UnionRng.EntireRow.Hidden = True
  [b1] = Timer - tg
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
À bạn ơi, cho mình hỏi thêm 1 chút với. Nếu mình dùng "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" thay cho "Sub Test()" để update ngay khi có dữ kiệu mới.Nhưng nếu dùng nó tihf chỉ cần 1 ô bất kì thay đổi dữ liệu là code chạy. Vậy có cách nào, file excel chỉ update khi chỉ 1 ô cố định thay đổi, như file ở trên là B8 đổi thì mới bắt đầu khởi chạy code, các ô khác thay đổi thì code không chạy.
Mình cảm ơn bạn trước!
khi dùng sự kiện chạy code phải chọn đúng loại sự kiện và giới hạn vùng địa chỉ sự kiện sẽ làm code chạy, nếu không thì code chạy lung tung làm chậm file(tìm đọc trên diễn đàn)
số lần làm thay đổi bảng tính càng nhiều thì code càng chạy chậm, phải tìm cách gộp các thao tác giống nhau thành 1 thao tác nếu được. test thử
Mã:
Sub Test()
  Dim Rng As Range, UnionRng As Range
  Application.ScreenUpdating = False
  tg = Timer
  [A9:A42000].EntireRow.Hidden = False
  For Each Rng In [A9:A42000]
    Rng.EntireRow.Hidden = Rng = ""
  Next Rng
  [a1] = Timer - tg
'*************
  tg = Timer
  [A9:A42000].EntireRow.Hidden = False
  For Each Rng In [A9:A42000]
    If Rng = "" Then
      If UnionRng Is Nothing Then
        Set UnionRng = Rng
      Else
        Set UnionRng = Union(UnionRng, Rng)
      End If
    End If
  Next Rng
  If Not UnionRng Is Nothing Then UnionRng.EntireRow.Hidden = True
  [b1] = Timer - tg
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
À bạn ơi, cho mình hỏi thêm 1 chút với. Nếu mình dùng "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" thay cho "Sub Test()" để update ngay khi có dữ kiệu mới.Nhưng nếu dùng nó tihf chỉ cần 1 ô bất kì thay đổi dữ liệu là code chạy. Vậy có cách nào, file excel chỉ update khi chỉ 1 ô cố định thay đổi, như file ở trên là B8 đổi thì mới bắt đầu khởi chạy code, các ô khác thay đổi thì code không chạy.
Mình cảm ơn bạn trước!
Bạn dùng cái này
Mã:
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Address = "$B$8" Then
'Code here
End Sub
 
Upvote 0
cảm ơn các bạn rất nhiều, mình làm được rồi :):):)
 
Upvote 0
Web KT

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

Back
Top Bottom