Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tôi có một file (c:\dulieu\doanhso.xls) có trường Doanhso và trường Tenhang, và file (c:\dulieu\tonghop.xls) có trường Tenhang,TongDT. tôi muốn tính tổng doanh số của từng mặt hàng bên file doanhso.xls rồi ghi giá trị sang file tổng hợp nhưng không muốn mở thủ công file doanhso.xls làm cách nào mong bạn và các chuyên gia Excel giúp đỡ.
Có file đính kèm!
SUMIF có thể bị lổi nếu tham chiếu nằm trên 1 Workbook khác và Workbook này đang đóng!
Giãi pháp: Dùng SUMPRODUCT
 
Upvote 0
Tôi thường hay phải khai rất nhiều biến, ví dụ iMa01 as long, iMa02 as long,...,iMa99 as long.
Vậy có thể rút gọn khai biến = for i = 1 to 99 được không?
Xin cám ơn!
 
Upvote 0
Tôi thường hay phải khai rất nhiều biến, ví dụ iMa01 as long, iMa02 as long,...,iMa99 as long.
Vậy có thể rút gọn khai biến = for i = 1 to 99 được không?
Xin cám ơn!
Câu hỏi rất hay nhưng cũng.. hơi.. buồn cười...
Tôi thì làm khác: Cố gắng hạn chế càng ít biến càng tốt (trong 1 vài trường hợp With.. End With có thể làm tốt việc này)
 
Upvote 0
Em thì khác khai báo vài biến thôi! Rồi dùng lại các biến này nếu nó đã hết nhiệm vụ trong quá trình xữ lý. Vậy đâu cần nhiều mà vẫn đủ!
Chúc vui.
Thân.
 
Upvote 0
Tôi thường hay phải khai rất nhiều biến, ví dụ iMa01 as long, iMa02 as long,...,iMa99 as long.
Vậy có thể rút gọn khai biến = for i = 1 to 99 được không?
Xin cám ơn!
Sao Thu Nghi không khai báo biến mảng?
Mã:
Dim Ma As Variant
For i = 1 to 99
Ma(i) = ...
Next

Nếu lấy giá trị trên sheet còn khoẻ nữa:

Mã:
Dim Ma As Variant
Ma=Range("A1:A100").Value
 
Upvote 0
Thú thật do trình độ nên không dám dùng lại biến, mà không khai thì nó không chạy, nhất là các biến endRow hoặc EndR dễ nhầm lẫn giữa các sheet. Lúc viết code mình hay copy đọan khai biến sẵn có và cứ thế mà "phang".
Rất cám ơn các bạn.
Còn một vấn đề nữa, có cách gì để loại bỏ bớt biến đã khai mà không sử dụng. Sợ dư thì cũng phí.
 
Upvote 0
Bác không để ý chứ 1 chức năng có thể quét các vấn đề này là Debug -> Debug cho phép quét xem code có đúng hay không thôi. Bác có thể thấy nó kế lệnh Run trên menu VBA đó -> Click vào và chọn Compile VBAProject. Và nếu có dư hoặc thiếu thì nó sẽ báo ngay.
Còn việc dùng như thế nào thì còn tùy thuộc vào tình huống nữa bác ơi, nói khơi khơi thì không thể hiểu được đâu.
Đành phải chờ dịp khác vậy!
Thân.
 
Upvote 0
Lúc viết code mình hay copy đọan khai biến sẵn có và cứ thế mà "phang". Còn một vấn đề nữa, có cách gì để loại bỏ bớt biến đã khai mà không sử dụng. Sợ dư thì cũng phí.
Mình có mẹo vặt sau:
*/ Vô hiệu hóa hoàn toàn các khai báo biến;
*/ Thêm từ Option Explicit vô trên macro;
*/ Thử chạy trình biên dịch để kiểm tra;
*/ Nếu biến nào bị báo thiếu khai báo thì hiệu lực nó lại

Còn muốn dùng lại biến, thì trước tiên ta dùng 'Tìm kiếm' từng biến một. Mục đích là đến chổ nào thì hết dùng nó trong đoạn mã; Đánh dấu '* [TenBien] để biết đến dòng lệnh đó là hết xài nó;
Lưu í các vòng lặp cần kết thúc một cách tường minh
Không phải là
Mã:
 . . . . . . 
           Next
Next

Mà là
PHP:
  . . . . . 
          Next GPE
Next Rng


Sau đó, cứ sau dòng lệnh được đánh dấu ta xài biến vô việc khác, nếu cùng kiểu dữ liệu
Dần dần sẽ tích lũy các mẹo này thôi.

Chúc bạn thành công.:-=
 
Lần chỉnh sửa cuối:
Upvote 0
Bác không để ý chứ 1 chức năng có thể quét các vấn đề này là Debug -> Debug cho phép quét xem code có đúng hay không thôi. Bác có thể thấy nó kế lệnh Run trên menu VBA đó -> Click vào và chọn Compile VBAProject. Và nếu có dư hoặc thiếu thì nó sẽ báo ngay.
Còn việc dùng như thế nào thì còn tùy thuộc vào tình huống nữa bác ơi, nói khơi khơi thì không thể hiểu được đâu.
Đành phải chờ dịp khác vậy!
Thân.

Chỉ thiếu nó mới báo (Khi có Option Explicit) chứ dư thì nó đâu có báo đâu.

Thân!
 
Upvote 0
Chào ThuNghi!
Mình cũng mới code VBA, ngày trước mình chẳng bao giờ động đến cả, do nhu cầu công việc nên đành phải làm thôi, nếu bạn quan tâm tới các ví dụ kết nối Oracle thì có thể xem một vài ví dụ của mình, bao gồm:
- Tác nghiệp với dữ liệu oracle
- an toàn dữ liệu, quyền truy cập, cho phép hay không cho phép mang dữ liệu ra ngoài hệ thống,....!
- Vì Việt Nam mình đa số được FPT cung cấp Oracle nên phát triển theo hướng đó là có lợi, SAP thì còn lâu lâu vì họ không thèm quan tâm ở VN mặc dù SAP đẳng cấp hơn Oracle 2 bậc.
Vì ở đây mình không có quyền post with attachment file, nên bạn vào www.gocrieng.com/quangle để xem nhé!
Thực ra ở đây toàn các anh chị cao thủ VBA cả, mình mới tập thôi! :d
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Macro bị lỗi?

Mình có file này bạn bè cho dùng để tính thép trong xây dựng, mà nó bị lỗi không biết nguyên nhân. Mình thì không rành mấy cái này lắm nên nhờ các bác cao thủ của GPExel giúp đỡ. Các bác dow về máy rồi kiểm tra sửa chữa cho em cái, rồi up lên cho em hoặc gửi qua em mail của em: minhtranxd@gmail.com
Rất mong sự nhiệt tình của các bác. Chúc các bác sang năm mới nhiều điều thành công mới....
 

File đính kèm

  • excel.zip
    386.1 KB · Đọc: 71
Upvote 0
Mình có file này bạn bè cho dùng để tính thép trong xây dựng, mà nó bị lỗi không biết nguyên nhân. Mình thì không rành mấy cái này lắm nên nhờ các bác cao thủ của GPExel giúp đỡ. Các bác dow về máy rồi kiểm tra sửa chữa cho em cái, rồi up lên cho em hoặc gửi qua em mail của em: minhtranxd@gmail.com
Rất mong sự nhiệt tình của các bác. Chúc các bác sang năm mới nhiều điều thành công mới....
Có code này trong file đâu mà "CHẠY"
Chỉ có VIRUS thôi!
Ẹc... Ẹc...
 
Upvote 0
Nhờ sửa giúp đoạn code sau

Từ một cột có dữ liệu (cột làm điều kiện) tôi muốn dịch sang một số cột để xóa dữ liệu Tôi viết [F6:F1000].SpecialCells(2, 23).Offset(0, 28 , 0 , 3).ClearContents nhưng không được nên phải viết như sau:
Mã:
            [F6:F1000].SpecialCells(2, 23).Offset(0, 28).ClearContents
            [F6:F1000].SpecialCells(2, 23).Offset(0, 29).ClearContents
            [G6:G1000].SpecialCells(2, 23).Offset(0, 28).ClearContents
            [G6:G1000].SpecialCells(2, 23).Offset(0, 26).ClearContents
            [I6:I1000].SpecialCells(2, 23).Offset(0, 25).ClearContents
            [I6:I1000].SpecialCells(2, 23).Offset(0, 24).ClearContents
Nhờ các bạn sửa giúp đoạn code này. Xin cảm ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Từ một cột có dữ liệu (cột làm điều kiện) tôi muốn dịch sang một số cột để xóa dữ liệu Tôi viết [F6:F1000].SpecialCells(2, 23).Offset(0, 28 , 0 , 3).ClearContents nhưng không được nên phải viết như sau:
Mã:
            [B][COLOR=Red][F6:F1000][/COLOR][/B].SpecialCells(2, 23).Offset(0,[COLOR=Blue][B]28[/B][/COLOR]).ClearContents
            [B][COLOR=Red][F6:F1000][/COLOR][/B].SpecialCells(2, 23).Offset(0, [COLOR=Blue][B]29[/B][/COLOR]).ClearContents
           [B][COLOR=Red] [G6:G1000][/COLOR][/B].SpecialCells(2, 23).Offset(0, [COLOR=Blue][B]28[/B][/COLOR]).ClearContents
            [B][COLOR=Red][G6:G1000][/COLOR][/B].SpecialCells(2, 23).Offset(0, [B][COLOR=Blue]26[/COLOR][/B]).ClearContents
            [B][COLOR=Red][I6:I1000][/COLOR][/B].SpecialCells(2, 23).Offset(0, [COLOR=Blue][B]25[/B][/COLOR]).ClearContents
            [B][COLOR=Red][I6:I1000][/COLOR][/B].SpecialCells(2, 23).Offset(0, [COLOR=Blue][B]24[/B][/COLOR]).ClearContents
Nhờ các bạn sửa giúp đoạn code này. Xin cảm ơn !


  1. Đoạn code trên thực hiện xoá dữ liệu ở các cột dịch đi số cột so với cột mốc khi dữ liệu ở cột làm mốc là Text
  2. Nếu cột làm mốc là Formmuula (chứa công thức)thì phải thay SpecialCells(2, 23) thành SpecialCells(3, 23)
 
Upvote 0
Xin lỗi có lẽ do mình nói chưa rõ: Mình muốn từ cột F dịch sang phải 28 cột và xóa dữ liệu ở 2 cột 28 và 29 thì viết như thế nào ?
 
Upvote 0
Từ một cột có dữ liệu (cột làm điều kiện) tôi muốn dịch sang một số cột để xóa dữ liệu Tôi viết [F6:F1000].SpecialCells(2, 23).Offset(0, 28 , 0 , 3).ClearContents nhưng không được nên phải viết như sau:
Mã:
            [F6:F1000].SpecialCells(2, 23).Offset(0, 28).ClearContents
            [F6:F1000].SpecialCells(2, 23).Offset(0, 29).ClearContents
            [G6:G1000].SpecialCells(2, 23).Offset(0, 28).ClearContents
            [G6:G1000].SpecialCells(2, 23).Offset(0, 26).ClearContents
            [I6:I1000].SpecialCells(2, 23).Offset(0, 25).ClearContents
            [I6:I1000].SpecialCells(2, 23).Offset(0, 24).ClearContents
Nhờ các bạn sửa giúp đoạn code này. Xin cảm ơn !
Bạn sửa lại thành:
PHP:
[F6:F1000].SpecialCells(2, 23).Offset(0, 28).Resize(, 3).ClearContents
Đại khái là vậy
Bạn để ý sẽ thấy hàm Offset + Resize trong VBA sẽ tương đương với 1 hàm OFFSET trong công thức Excel
 
Upvote 0
Xin lỗi có lẽ do mình nói chưa rõ: Mình muốn từ cột F dịch sang phải 28 cột và xóa dữ liệu ở 2 cột 28 và 29 thì viết như thế nào ?

Nói vậy vẫn khó hình dung

  1. Từ cột F (cột 6) dịch sang phải 28 cột ta được cột 34 (cột AH)
  2. Vậy muốn xoá 2 cột AH và AI hay là xoá hai cột 28 và 29 (cột AB và AC)
 
Upvote 0
Mình đang muốn giải thích 2 câu này mà
[F6:F1000].SpecialCells(2, 23).Offset(0, 28).ClearContents
[F6:F1000].SpecialCells(2, 23).Offset(0, 29).ClearContents
tức là 2 cột cột AH và AI
 
Upvote 0
Bạn sửa lại thành:
PHP:
[F6:F1000].SpecialCells(2, 23).Offset(0, 28).Resize(, 3).ClearContents
Đại khái là vậy
Bạn để ý sẽ thấy hàm Offset + Resize trong VBA sẽ tương đương với 1 hàm OFFSET trong công thức Excel

@ Ndu câu này bị lỗi bạn ạ. Bạn vui lòng kiểm tra lại giúp mình với.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom