Tạo dòng status hiển thị tên công việc

  • Thread starter Thread starter vba_gpe
  • Ngày gửi Ngày gửi
Liên hệ QC

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Mình có vấn đề này nhờ các bác chỉ giáo:
File excel mình gửi có các cột: Số thứ tự, mã hiệu, tên công việc, đơn vị tính, khối lượng,......
Khi làm dự toán, nhiều công việc nên thêm và bớt công việc thường xuyên, ngồi cập nhật thì hơi lâu. Qua tham khảo trên diễn đàn, mình học được cách để excel tự động cập nhật số thứ tư khi thêm công việc. Trên statusbar hiện tại đã hiễn thị dòng: "Dang them so thu tu: số thứ tự công việc". Tuy nhiên có cách nào để thay số thứ tự bằng tên công việc luôn được không: Nghĩa là statusbar có dạng :"Dang them so thu tu cho cong viec: "& Tên công việc nó đang thêm.
[
PHP:
Sub vd()
    Dim cls As Range, vung As Range, stt As Long
    Application.ScreenUpdating = False
    Application.DisplayStatusBar = True
    Set vung = Range([B3], [B65500].End(xlUp))
    stt = 0
        For Each cls In vung
            If cls.Value <> "" Then
                With cls
                    If .Value <> "" Then
                        stt = stt + 1
                        .Offset(0, -1) = stt
                        Application.StatusBar = "Dang them so thu tu: " & stt 
                    End If
                End With
            End If
        Next cls
    Application.StatusBar = False
End Sub
Thân. Mong được chỉ giáo thêm.
 

File đính kèm

File của bạn lỗi không mở được. Bạn kiểm tra lại xem đúng không.
 
Upvote 0
File của bạn lỗi không mở được. Bạn kiểm tra lại xem đúng không.
Đúng là nó báo lỗi:
anhso-121101_Picture1.jpg
http://up.anhso.net
Tuy nhiên, nếu click "Yes" mình vẫn mở file được.

Mình đã up lại file khác. (đã test mở bình thường trên office 2007 ->)
Mong nhận được hồi đáp
Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
File của bạn lỗi không mở được. Bạn kiểm tra lại xem đúng không.
Anh đổi đuôi file thành xlsx là mở được liền (lỗi này do tác giả gây ra)
Hổng biết tác giả cần cái Status bar để làm giống gì ---> Vì code chạy cái rụp là xong, có kịp nhìn thấy gì đâu chứ
Nếu cần thì vầy:
PHP:
Sub vd()
  Dim cls As Range, stt As Long
  For Each cls In Range([B3], [B65500].End(xlUp))
    If cls.Value <> "" Then
      stt = stt + 1
      cls.Offset(0, -1) = stt
      Application.StatusBar = "Dang them so thu tu cho cong viec: " & cls.Offset(, 1)
    End If
  Next cls
  Application.StatusBar = False
End Sub
Hic... Code này thấy nó.. buồn cười thế nào ấy
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chân thành cảm ơn bạn ndu96081631

Hổng biết tác giả cần cái Status bar để làm giống gì Vì code chạy cái rụp là xong, có kịp nhìn thấy gì đâu chứ
Dear:
- Nếu số lượng công việc là ít thì chắc chắn không thấy được status hiển thị. Tuy nhiên, nếu số lượng công việc nhiều thì dòng status sẽ hiển thị.
- Mình tham khảo được một vài câu lệnh từ trên diễn đàn thấy có thể phục vụ cho công việc của mình, tuy nhiên do kiến thức VB hạn hẹp nên mình nhờ các bạn giúp. Có thể một số cái mình đưa ra nó không thiết thực đối với bạn, tuy nhiên có ý nghĩa đối với mình, mình biết thêm được chút ít nữa. (Bạn thông cảm)

Thân.
 
Upvote 0
Nếu số lượng công việc là ít thì chắc chắn không thấy được status hiển thị. Tuy nhiên, nếu số lượng công việc nhiều thì dòng status sẽ hiển thị.
Chỉ hiển thị được nếu code chạy QUÁ CHẬM ---> Mà code chậm là do: Dữ liệu nhiều hoặc thuật toán chưa tối ưu
Tóm lại: Người ta muốn code chạy nhanh còn bạn thì lại muốn ngược lại, kỳ lạ thật!
----------------------
Với số lượng công việc cở 60,000 dòng, tôi có thể viết code chạy trong thời gian < 1 giây đây
 
Upvote 0
Người ta muốn code chạy nhanh còn bạn thì lại muốn ngược lại, kỳ lạ thật!
Vậy là bạn hiểu sai rồi.
Ai lại không muốn macro chạy nhanh, tiết kiệm được thời gian. Thay vì để cái dòng status mặc định là :"ready" của excel thì qua cách của bạn mình có thể thay đổi điều này. (Ai mà không muốn có sự đổi mới đúng không?).
- Kiến thức VB mình không nhiều nên code không tối ưu là chuyện dễ hiểu, nếu bạn đóng góp được để macro chạy nhanh hơn thì mình cảm kích vô cùng.

Thân.
 
Upvote 0
Vậy là bạn hiểu sai rồi.
Ai lại không muốn macro chạy nhanh, tiết kiệm được thời gian. Thay vì để cái dòng status mặc định là :"ready" của excel thì qua cách của bạn mình có thể thay đổi điều này. (Ai mà không muốn có sự đổi mới đúng không?).
- Kiến thức VB mình không nhiều nên code không tối ưu là chuyện dễ hiểu, nếu bạn đóng góp được để macro chạy nhanh hơn thì mình cảm kích vô cùng.

Thân.
Quá dễ nếu dùng Array
PHP:
Sub Test()
  Dim stt As Long, tmp, Arr, i As Long, TG As Double
  TG = Timer
  tmp = Range([B3], [B65500].End(xlUp)).Value
  ReDim Arr(1 To UBound(tmp), 1 To 1)
  For i = 1 To UBound(tmp)
    If tmp(i, 1) <> "" Then
      stt = stt + 1
      Arr(i, 1) = stt
    End If
  Next
  Range("A3").Resize(i - 1).Value = Arr
  Application.StatusBar = False
  MsgBox Timer - TG
End Sub
File đính kèm dưới đây có dữ liệu 60,000 dòng. Bạn thử chạy code xem tổng thời gian là bao nhiêu nha (trên máy tôi code chạy trong thời gian 0.2 giây đấy)
 

File đính kèm

Upvote 0
Đúng là nhanh thật. (0.203 s)
Cảm ơn bạn ndu96081631
Mong được chỉ giáo thêm. ||\
 
Upvote 0
Web KT

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

Back
Top Bottom