Wonderful VBA

  • Thread starter adam_tran
  • Ngày gửi
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#1
Tớ thử ứng dụng VBA từ Excel sang Corel Photopaint, thật không tin được, tớ chỉnh sửa hình (resize) 20 hình JPEG bitmap với size xấp xỉ 1MB trong vòng 30 giây!
Bây giờ cho tớ hỏi 1 chút: Muốn refer tới lần lượt các file cùng kiểu trong cùng thư mục, thì cú pháp lệnh như thế nào? Điều kiện là không được phép mở nhiều file vì mở nhiều thì treo máy.
Có thể dùng For each được không và làm thế nào? Help me!
 
T

thanhvo31

Thành viên sơ cấp
17/7/05
36
0
0
44
Haiphong
#3
bạn thử đoạn mã "nhà quê" này xem
Use the Execute method to begin the file search and update the FoundFiles object. The following example searches the My Documents folder for all files whose names begin with "Cmd" and displays the name and location of each file that's found. The example also sorts the returned files in ascending alphabetic order by file name.

Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileName = "cmd*"
If .Execute(SortBy:=msoSortbyFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#4
thanhvo31 nói:
bạn thử đoạn mã "nhà quê" này xem
Use the Execute method to begin the file search and update the FoundFiles object. The following example searches the My Documents folder for all files whose names begin with "Cmd" and displays the name and location of each file that's found. The example also sorts the returned files in ascending alphabetic order by file name.

Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileName = "cmd*"
If .Execute(SortBy:=msoSortbyFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With
Kha kha, hiện đại thế mà bảo là nhà quê... Bác thanhvo đúng là cao thủ thật. Tôi vẫn rất cảm kích bác về đoạn mã nén file bửa nọ.
 
T

thanhvo31

Thành viên sơ cấp
17/7/05
36
0
0
44
Haiphong
#5
workman nói:
Kha kha, hiện đại thế mà bảo là nhà quê... Bác thanhvo đúng là cao thủ thật. Tôi vẫn rất cảm kích bác về đoạn mã nén file bửa nọ.
bác làm em ngượng quá!
Kỳ thực là em copy trong help ra đó. Cách học VBA của em cũng qua help luôn, vd bí cài gì, mở hộp search ra đánh luôn , vd vụ này gõ file search ...
Cơ bản là có tý tiếng Anh đọc sách được.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#6
thanhvo31 nói:
bác làm em ngượng quá!
Kỳ thực là em copy trong help ra đó. Cách học VBA của em cũng qua help luôn, vd bí cài gì, mở hộp search ra đánh luôn , vd vụ này gõ file search ...
Cơ bản là có tý tiếng Anh đọc sách được.
Đúng rồi. Đây là cách học rất chuẩn cho những người cả mới và cũ về 1 vấn đề nào đó. Gần như ko có gì ko thể giải quyết được. Thanhvo31 ko việc gì phải "ngượng" cả. Hầu hết những người "biết nhiều" trên khắp thế giới này cũng phải học 1 phần qua cách đó. Vì thế, tớ thích nhất là cung cấp cái "cần câu" hơn là cung cấp "cá" là vì vậy.

Cheers
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#7
hai2hai nói:
Đúng rồi. Đây là cách học rất chuẩn cho những người cả mới và cũ về 1 vấn đề nào đó. Gần như ko có gì ko thể giải quyết được. Thanhvo31 ko việc gì phải "ngượng" cả. Hầu hết những người "biết nhiều" trên khắp thế giới này cũng phải học 1 phần qua cách đó. Vì thế, tớ thích nhất là cung cấp cái "cần câu" hơn là cung cấp "cá" là vì vậy.
Cheers
Thanks for all.
Tớ hỏi là để resize hơn 440 cái hình SN WKT, (bình quân mỗi cái 1.7MB), làm bằng tay thì lâu, mở ra chừng 30 cái một lượt (rồi cho application chạy lệnh nội suy để sắp xếp 1800*2400 điểm ảnh mỗi hình) thì CPU cũng điên.
Lạy trời, cuối cùng cũng mò được tuy có hơi thủ công (bằng Corel Photopaint 12 nó support VBA nhưng không support record). Resize 440 cái hình trong chừng 1 giờ! Chừng mổi 15 phút là chương trình bị lỗi (có lẽ thiếu bộ nhớ) restart lại để giải phóng RAM, chạy tiếp!
Kết quả: 440 cái hình với gần 700MB chỉ còn lại 72MB! He he, tự thưởng cho mình :food-smil
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#8
Đây là cách học rất chuẩn cho những người cả mới và cũ về 1 vấn đề nào đó. Gần như ko có gì ko thể giải quyết được. Thanhvo31 ko việc gì phải "ngượng" cả. Hầu hết những người "biết nhiều" trên khắp thế giới này cũng phải học 1 phần qua cách đó. Vì thế, tớ thích nhất là cung cấp cái "cần câu" hơn là cung cấp "cá" là vì vậy.
Đôi lời với các fan mê VBA! :biggrin:
Tớ có hơi hấp tấp khi tạo cái thread này. Số là làm = tay mấy cái hình trên thì cực quá, anh hai2hai up có 40 cái hình mà em down mất gần tiếng rưỡi. Thấy Photopaint có support VBA nên thử chút kiến thức vỡ lòng VBA của Excel xem có ứng dụng được không. Khi thấy được, mừng quá (thế mới đặt tên là wonderful VBA), không kịp suy nghỉ vội post cái thread này để mong mọi người chỉ giáo khắc phục macro của mình.
Cám ơn anh thanhvo về đoạn code rất pro của anh, cám ơn bác hai2hai (the7habitsman) :biggrin: về lời hướng dẫn cách học.
Phải nói là VBA làm được nhiều thứ quá hay!
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#9
adam_tran nói:
Thanks for all.
Tớ hỏi là để resize hơn 440 cái hình SN WKT, (bình quân mỗi cái 1.7MB), làm bằng tay thì lâu, mở ra chừng 30 cái một lượt (rồi cho application chạy lệnh nội suy để sắp xếp 1800*2400 điểm ảnh mỗi hình) thì CPU cũng điên.
Lạy trời, cuối cùng cũng mò được tuy có hơi thủ công (bằng Corel Photopaint 12 nó support VBA nhưng không support record). Resize 440 cái hình trong chừng 1 giờ! Chừng mổi 15 phút là chương trình bị lỗi (có lẽ thiếu bộ nhớ) restart lại để giải phóng RAM, chạy tiếp!
Kết quả: 440 cái hình với gần 700MB chỉ còn lại 72MB! He he, tự thưởng cho mình :food-smil
Thương quá nhỉ. So Adam ko chịu khó chạy ra Bùi Thị Xuân mua mấy cái chương trình chuyên resize ảnh về làm mất có mấy phút thôi lại còn đẹp nữa.
 
T

thanhvo31

Thành viên sơ cấp
17/7/05
36
0
0
44
Haiphong
#10
mách nhỏ adam_tran:
nếu bạn có photoshop cài sẵn, mở File>Script>Image Processor
Theo các bước 1)chọn folder nguồn 2)đích, nơi save 3)tick Resize to fit...
Run và :food-smil ,:dzo:
Chúc vui nhé!
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#11
workman nói:
Thương quá nhỉ. So Adam ko chịu khó chạy ra Bùi Thị Xuân mua mấy cái chương trình chuyên resize ảnh về làm mất có mấy phút thôi lại còn đẹp nữa.
Ặc, có thế nữa cơ đấy, mình chẳng biết gì cả. (mà cao thủ như bác hai2hai mà vẫn để nguyên file up lên làm bà con la trời, hà hà, mình không biết cũng phải)!
Nói vậy thôi, ngoài resize, em còn phải thay đổi chuẩn nén để nén mạnh hơn, độ smooth của JPEG nữa để hình đỡ bị rỗ quá....
mách nhỏ adam_tran:
nếu bạn có photoshop cài sẵn, mở File>Script>Image Processor
Theo các bước 1)chọn folder nguồn 2)đích, nơi save 3)tick Resize to fit...
Đúng là mình có mắt như mù, cứ tưởng Photoshop không có mấy cái này. Trong Photoshop 5.5 là lệnh Automate... híc híc!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#12
workman nói:
Thương quá nhỉ. So Adam ko chịu khó chạy ra Bùi Thị Xuân mua mấy cái chương trình chuyên resize ảnh về làm mất có mấy phút thôi lại còn đẹp nữa.
thanhvo31 nói:
mách nhỏ adam_tran:
nếu bạn có photoshop cài sẵn, mở File>Script>Image Processor
Theo các bước 1)chọn folder nguồn 2)đích, nơi save 3)tick Resize to fit...
Run và :food-smil ,:dzo:
Chúc vui nhé!
Đây cũng là 1 cách học nữa (nhưng là cách học để giải quyết 1 vấn đề )

Đối với 1 vấn đề được đặt ra, thường sau khi nghĩ ra được cách làm thì phải nghĩ thêm 1 chút nữa là xem cách đó có phải là tối ưu hay ko. Liệu còn cách nào khác hay hơn, tối ưu hơn hay ko? cover hết các trường hợp hay ko? v.v... Cách này mà áp dụng trong sản xuất phần mềm sẽ làm cho phần mềm trở nên có sự khác biệt đấy.

P/S: Cách của thanhvo31 này khá hay nhỉ :)

adam_tran nói:
Ặc, có thế nữa cơ đấy, mình chẳng biết gì cả. (mà cao thủ như bác hai2hai mà vẫn để nguyên file up lên làm bà con la trời, hà hà, mình không biết cũng phải)!
Nói vậy thôi, ngoài resize, em còn phải thay đổi chuẩn nén để nén mạnh hơn, độ smooth của JPEG nữa để hình đỡ bị rỗ quá....
Vì mình thường download cả vài trăm MBs nên hôm đó thật không ngờ mọi người kêu nhiều thế :). Thậm chí down cả bộ VS .Net 2005 tận 2Gbs đấy. Chứ mấy file ảnh có hơn 40MBs ăn thua gì nên upload lên cho mọi người luôn - vì cứ nghĩ ảnh gốc, phân giải cao thì xem nó mới đẹp. (Với lại trong máy của mình cũng chẳng có phần mềm xử lý ảnh nào cả)

Chúc vui vẻ!
 
Sửa lần cuối:

Thành viên trực tuyến

  • cando

Xem nhiều