[Help]Tối ưu lại Code thay thế từ Excel sang Word (1 người xem)

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

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

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
729
Được thích
98
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Do nhu cầu mục đích tạo hồ sơ pháp lý sau khi tính toán từ Excel, mình lên mạng có Search được Topic và sửa lại nhưng code chắp vá quá mong anh chị tối ưu lại code giúp em với ạ
Trong file excel sẽ có cột A dùng làm từ khóa, cột B là giá trị dùng để thay thế sang Word.
Cám ơn anh chị!
 

File đính kèm

Các anh chị giúp em trường hợp hàm thay thế trong trường hợp chuỗi thay thế > 255 ký tự với ạ
 
Upvote 0
Cũng có nhu cầu giống bạn, chuỗi >255 là tịt luôn
 
Upvote 0
Code rác quá, nhìn là oải, không muốn sữa, optimize cho bạn.
File Excel tôi down về bị lỗi, bạn up lại nhé. Trước khi up chịu khó clean code, remove các sub/function không dùng, trong các sub/function remove các dim không dùng, code chịu khó tab, canh lề, enter new line cho dễ nhìn, dễ đọc
 
Lần chỉnh sửa cuối:
Upvote 0
Code rác quá, nhìn là oải, không muốn sữa, optimize cho bạn.
File Excel tôi down về bị lỗi, bạn up lại nhé. Trước khi up chịu khó clean code, remove các sub/function không dùng, trong các sub/function remove các dim không dùng, code chịu khó tab, canh lề, enter new line cho dễ nhìn, dễ đọc

Em gửi lại anh
 

File đính kèm

Upvote 0
Bạn test lại thử xem có đúng ý bạn không ? Mấy cái vụ Word wiec này tôi không rành lắm.
 

File đính kèm

Upvote 0
Dạ cám ơn anh, code anh chạy vẫn chưa đúng ạ.
Ví dụ: Dòng B27 chiều dài chuỗi thay thế là 270 kỹ tự nhưg khi code chạy cắt còn 249 kỹ tự
Anh sửa lại giúp em với ạ
Bài đã được tự động gộp:

Mã:
chunk = Mid(strReplace, ((I - 1) * 250) + 1, 250)
Đoạn code này lấy có 250 ký tự anh
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi bỏ code đó đi, lằng nhằng, theo code ban đầu của bạn nên phức tạp vậy. Xin lỗi cậu lúc chiều về vội nên tôi không test kỹ.
Cậu thử lại code này xem sao
 

File đính kèm

Upvote 0
Cám ơn anh rất nhiều. Đánh dấu lưu lại bài ạ
 
Upvote 0
Các anh chị giúp em trường hợp hàm thay thế trong trường hợp chuỗi thay thế > 255 ký tự với ạ
Thường thì mình sẽ làm như thế này
Vi dụ Thay thế 260 ký tự , đầu tiên thay thế 240 ký tự + 1 chuỗi X (X<15 ký tự) xong tiếp tục thay thế 20 ký tự còn lại vào chuỗi X đó. chuỗi càng dài thì cứ lặp lại hành động này.
 
Upvote 0
Bạn vào References của VBA project, add lại reference tới Microsoft Word xxx.xx trên máy bạn.
 
Upvote 0
F2, Object Browse , tìm và sửa đi bạn ơi. Dễ mà.
 
Upvote 0
Bạn up file Msword.olb trên máy bạn lên, tôi xem và sữa cho
Máy bạn office 2016 nên thư mục có thể là x:\Program Files xxx\Office 15
Chắc là có thay đổi trong properties, constants giữa các đời Office, Word....
 

File đính kèm

  • Untitled.png
    Untitled.png
    21.1 KB · Đọc: 40
  • Untitled.png
    Untitled.png
    110.3 KB · Đọc: 34
Upvote 0
Cũng không cần thêm References đâu. Tức nếu có Misrosoft Word XXX Object Library thì bỏ nó đi.

Sau dòng
Mã:
Private Sub FindAndReplace(ByVal strFind As String, ByVal strReplace As String)
thì thêm
Mã:
Const wdGoToSection = 0
Const wdGoToFirst = 1
Const wdReplaceAll = 2
Const wdFindContinue = 1

Đấy là khai báo cục bộ (Local). Nếu muốn dùng cả trong những Sub, Function khác (trong tương lai) thì khai báo toàn cục (Global) - ở đầu Module, trước tất cả các Sub, Function.

Nếu tương lai còn dùng các hằng số khác của Word thì khai báo thêm.

Khai báo là việc nên làm vì nhiều khi hằng số được dùng ở nhiều nơi trong code, ngoài ra code cũng sẽ dễ đọc rất nhiều. Con số 0 chả nói, chả gợi ý cái gì cả nhưng cái tên wdGoToSection thì nói nhiều điều.
 
Upvote 0
...Khai báo là việc nên làm vì nhiều khi hằng số được dùng ở nhiều nơi trong code, ngoài ra code cũng sẽ dễ đọc rất nhiều. Con số 0 chả nói, chả gợi ý cái gì cả nhưng cái tên wdGoToSection thì nói nhiều điều.
Nhiều người ở diễn đàn này theo tôn chỉ "code càng ngắn càng tốt". Con số 0 nói lên tôn chỉ ấy, cái tên wdGoToSection nó dài hơn đến 12 ký tự. :p:p:p

(*) ở diễn đàn này, cái từ "magic number" (số trên trời rớt xuống) hoàn toàn không có một ý nghĩa gì cả.
 
Upvote 0
Nhiều người ở diễn đàn này theo tôn chỉ "code càng ngắn càng tốt". Con số 0 nói lên tôn chỉ ấy, cái tên wdGoToSection nó dài hơn đến 12 ký tự. :p:p:p

(*) ở diễn đàn này, cái từ "magic number" (số trên trời rớt xuống) hoàn toàn không có một ý nghĩa gì cả.
Cứ theo tôn chỉ ấy thì code luôn có thể rút gọn nhiều nơi, kể cả hằng lẫn cú pháp. Ngắn thì đúng thật nhưng đảm bảo là sau một thời gian thì ngay cả tác giả đọc code cũng không hiểu chỗ này có ý nghĩa gì, chỗ kia tại sao là thế. Nhìn code thấy một loạt số 0 nhưng rất có thể ý nghĩa của chúng trong mỗi ngữ cảnh lại khác nhau.

Bác không dự thi "code ngắn gọn" nhưng nhiều người thích. Họ giành được nhiều giải còn bác chỉ là khán giả "vỗ tay"? :D
 
Upvote 0
Để đợi bạn thoai up file .olb lên mới biết lỗi gì, có thể method Goto khai báo khác hay các constant khai báo khác name
 
Upvote 0
Mà nghĩ cũng lạ, code thì ý tưởng, code có sẵn hết, mà báo lỗi chút, kg chạy được cũng la làng, trong khi Excel, VBA IDE cung cấp sẵn hết, chỉ chịu khó search, tìm , F2...chút là ra
Thời mình bắt đầu làm coder, VN ta Internet còn kg có, lập trình mã máy, Assembly,... vẫn xong
 
Upvote 0
"vẫn xong" nhưng mà cuối cùng thì được gì?
Thời nào của ấy, hỏi được thì cứ hỏi. La làng có ai thấy mặt đâu mà sợ xấu hổ.
Thì giờ để đi kiếm tiền nơi khác không sướng hơn à?
 
Upvote 0
Do nhu cầu mục đích tạo hồ sơ pháp lý sau khi tính toán từ Excel, mình lên mạng có Search được Topic và sửa lại nhưng code chắp vá quá mong anh chị tối ưu lại code giúp em với ạ
Trong file excel sẽ có cột A dùng làm từ khóa, cột B là giá trị dùng để thay thế sang Word.
Cám ơn anh chị!
Bạn cho mình hỏi từ khóa lấy thủ công từ Word để điền sang Excel à bạn ơi?
 
Upvote 0
Thôi bỏ code đó đi, lằng nhằng, theo code ban đầu của bạn nên phức tạp vậy. Xin lỗi cậu lúc chiều về vội nên tôi không test kỹ.
Cậu thử lại code này xem sao
ThangCuAnh cho em hỏi em muốn giữ nguyên format ở trên file word chỉ thay thế nội dung text thì chỉnh như nào ạ !
 
Upvote 0
Em nhờ các bác giúp em với ạ. Em làm nhưng không thấy nó thay thế ạ.
 

File đính kèm

Upvote 0

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

Back
Top Bottom