Hỏi nhanh - Đáp nhanh về macro (dành cho các thành viên mới học lập trình)

Liên hệ QC

tuananhya2

Thành viên mới
Tham gia
18/8/12
Bài viết
8
Được thích
0
Co ai chỉ dùm cách tạo pass marco với
 
tks anh, đúng rồi, anh cho hỏi thêm, các con số (4), làm sao mình biết được vậy anh?
nếu tôi đổi thành
Set rng = Range("A:A").SpecialCells(3)
rng.Select
thì nó lại chọn các vùng có số liệu.
hay như tôi thấy mọi người hay dùng advance filter thì ghi là
AdvancedFilter 2, , [range], 1
nếu mình ghi record macro thì nó dài ngoằn, nên ko biết làm sao biết các con số đó

tks

SpecialCells tương đương với thao tác Ctrl + G trên bảng tính
Vậy bạn cứ Ctrl + G, bấm nút Specials, đếm từ trên xuống, mục Blanks nằm vị trí thứ 4
Tôi dùng cách suy đoán này để làm thôi
Tương tự thế với Advanced Filter hay Sort ---> cửa sổ mở ra, ta đếm các nút check từ trên xuống (1 ở trên cùng, 2 kế tiếp...). Vậy thôi
Ẹc... Ẹc...
 
Upvote 0
tks anh, đúng rồi, anh cho hỏi thêm, các con số (4), làm sao mình biết được vậy anh?
nếu tôi đổi thành
Set rng = Range("A:A").SpecialCells(3)
rng.Select
thì nó lại chọn các vùng có số liệu.
hay như tôi thấy mọi người hay dùng advance filter thì ghi là
AdvancedFilter 2, , [range], 1
nếu mình ghi record macro thì nó dài ngoằn, nên ko biết làm sao biết các con số đó

tks

xem thử link này xem http://msdn.microsoft.com/en-us/library/office/aa213567(v=office.11).aspx
 
Upvote 0
nhờ các anh chi cho xin đoạn code tìm dòng trống đâu tiên
vi du A1--->A6 có số liệu
A7-->A8 trống
A9---> lại tiếp tục có số liệu
tôi muốn tìm A7.
cám ơn mọi người
Cái dòng code này được không

MsgBox [A1].End(4).Offset(1).Address
 
Upvote 0
Cái dòng code này được không

MsgBox [A1].End(4).Offset(1).Address
Được & Không được
Tức là:
Có lúc "được" & có lúc "hổng được"
Tức là:
Nếu [A2] có dữ liệu thì..............được, còn ngược lại thì........."tèo"
Híc
Số dd của Hải phía bên dưới là số..........đểu hả ????
 
Lần chỉnh sửa cuối:
Upvote 0
Được & Không được
Tức là:
Có lúc "được" & có lúc "hổng được"
Tức là:
Nếu [A2] có dữ liệu thì..............được, còn ngược lại thì........."tèo"
Híc
Số dd của Hải phía bên dưới là số..........đểu hả ????
Dạ sdt đó là của em đó chứ. Bữa viết quên mất số 0908, định bụng sửa lại chữ ký mà dạo này lu bu quá nên chưa vào được trang chỉnh sửa thông tin cá nhân.
 
Upvote 0
hỏi cách thoát một vòng lặp
chào ACE, mình có một vấn đề nhờ ACE giúp,
mình có 2 vòng lặp lồng vào nhau
for i=1 to 10
for j=1 to 10
'các lệnh ở đây
next j
next i
khi i chạy đườc 2 và j chạy tới 5 thì bị lổi, mình muốn thoát vòng lặp j không làm tiếp 6-10. mà nhảy ra lặp i lên 3
nếu dùng exit for thì nó thoát cả 2 vòng lặp.
nếu dùng on error resume next thì nó vẫn tiếp tục tăng j lên 6,7,8,9,10

nhờ ACE giúp dùm, hổng biết câu hỏi có quá ngu hong nữa
tks bà con
 
Upvote 0
hỏi cách thoát một vòng lặp
chào ACE, mình có một vấn đề nhờ ACE giúp,
mình có 2 vòng lặp lồng vào nhau
for i=1 to 10
for j=1 to 10
'các lệnh ở đây
next j
next i
khi i chạy đườc 2 và j chạy tới 5 thì bị lổi, mình muốn thoát vòng lặp j không làm tiếp 6-10. mà nhảy ra lặp i lên 3
nếu dùng exit for thì nó thoát cả 2 vòng lặp.
nếu dùng on error resume next thì nó vẫn tiếp tục tăng j lên 6,7,8,9,10

nhờ ACE giúp dùm, hổng biết câu hỏi có quá ngu hong nữa
tks bà con

Đã thử chưa? Thử code có tốn tiền đau mà cũng hà tiện!
Ai nói là nó thoát ra cả 2 vòng lặp vậy?
 
Upvote 0
Cho em hỏi 1 vấn đề về undo trong excle :
Giả sử e run code sau :
PHP:
Sub GPE()    
[A1:G8].Copy [H1:N8]
End Sub

Bây giờ tại worksheet em muốn ấn ctrl +Z để trở về trạng thái ban đầu ( trước lúc copy vào vùng [H1:N8]) , thì phải bổ sung vào code như thế nào
 
Upvote 0
Cho em hỏi 1 vấn đề về undo trong excle :
Giả sử e run code sau :
PHP:
Sub GPE()    
[A1:G8].Copy [H1:N8]
End Sub

Bây giờ tại worksheet em muốn ấn ctrl +Z để trở về trạng thái ban đầu ( trước lúc copy vào vùng [H1:N8]) , thì phải bổ sung vào code như thế nào

Undo trong VBA không phải là chuyện dễ. Bạn tham khảo thử chổ này:
http://www.j-walk.com/ss/excel/tips/tip23.htm
Nói chung người ta sẽ làm động tác "nhớ" khu vực chuẩn bị thay đổi vào 1 biến. Sau này muốn Undo thì gán giá trị đã nhớ vào khu vực nói trên
 
Upvote 0
Từ VBA trong excel em muốn tắt bỏ cửa sổ Notepad + 1 thông điệp lưu hay không lưu, tìm tòi trên diễn đàn em thử viết đoạn code như sau :
Mã:
Private Const WM_CLOSE As Long = &H10
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
-----------------------------------------------------------------------------------------
Sub Main()
   h = FindWindow("notepad", vbNullString) ' notepad
    SendMessage h, WM_CLOSE, 0, 0
End Sub

*Nhưng mà khi chạy code xong, cửa sổ notepad tự tắt luôn mà chẳng có hộp thoại thông báo nào <--------- ?-+*/
*vấn đề nữa là làm sao mình tìm được tên LpclassName của bất kỳ cửa sở hiện hành nào ? ví dụ như word là OPusAPP <<--- làm sao mình tìm được opusapp ???, giả sửa em có thêm ứng dụng autocad.exe đang chạy thì tên của cửa sổ là gì ?+-+-+-+

--> mong các anh giải đáp vướng mắc của em !
 
Lần chỉnh sửa cuối:
Upvote 0
Từ VBA trong excel em muốn tắt bỏ cửa sổ Notepad + 1 thông điệp lưu hay không lưu, tìm tòi trên diễn đàn em thử viết đoạn code như sau :
Mã:
Private Const WM_CLOSE As Long = &H10
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
-----------------------------------------------------------------------------------------
Sub Main()
   h = FindWindow("notepad", vbNullString) ' notepad
    SendMessage h, WM_CLOSE, 0, 0
End Sub

*Nhưng mà khi chạy code xong, cửa sổ notepad tự tắt luôn mà chẳng có hộp thoại thông báo nào <--------- ?-+*/
Chẳng biết nữa, nhưng tôi chạy code trên thì có thông báo xuất hiện (hỏi Save...)

*vấn đề nữa là làm sao mình tìm được tên LpclassName của bất kỳ cửa sở hiện hành nào ? ví dụ như word là OPusAPP <<--- làm sao mình tìm được opusapp ???, giả sửa em có thêm ứng dụng autocad.exe đang chạy thì tên của cửa sổ là gì ?+-+-+-+

--> mong các anh giải đáp vướng mắc của em !
Dùng hàm này thử xem:
Mã:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Function WinClassName(ByVal WinCap As String) As String
  Dim WinWnd As Long, RetVal As Long, lpClassName As String
  WinWnd = FindWindow(vbNullString, WinCap)
  If WinWnd <> 0 Then
    lpClassName = Space(256)
    RetVal = GetClassName(WinWnd, lpClassName, 256)
    WinClassName = Left$(lpClassName, RetVal)
  End If
End Function
Sub Test()
  MsgBox WinClassName("Untitled - Notepad")
  MsgBox WinClassName("Document1 - Microsoft Word")
End Sub
 
Upvote 0
Chẳng biết nữa, nhưng tôi chạy code trên thì có thông báo xuất hiện (hỏi Save...)


Dùng hàm này thử xem:
Mã:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Function WinClassName(ByVal WinCap As String) As String
  Dim WinWnd As Long, RetVal As Long, lpClassName As String
  WinWnd = FindWindow(vbNullString, WinCap)
  If WinWnd <> 0 Then
    lpClassName = Space(256)
    RetVal = GetClassName(WinWnd, lpClassName, 256)
    WinClassName = Left$(lpClassName, RetVal)
  End If
End Function
Sub Test()
  MsgBox WinClassName("Untitled - Notepad")
  MsgBox WinClassName("Document1 - Microsoft Word")
End Sub

Hàm WinClassName thì tuyệt rồi}}}}} ! hix nhưng mà cái vụ sendmessega thì máy em nó cứ out luôn mà chẳng thông báo gì ( win 7 /32bits) <---- hổng lẽ win lỗi
Để em thử ngâm cứu thêm!
cảm ơn anh nhiểu !
 
Upvote 0
Hàm WinClassName thì tuyệt rồi}}}}} ! hix nhưng mà cái vụ sendmessega thì máy em nó cứ out luôn mà chẳng thông báo gì ( win 7 /32bits) <---- hổng lẽ win lỗi
Để em thử ngâm cứu thêm!
cảm ơn anh nhiểu !

Tôi cũng dùng Win7 nè
Có khi nào bạn mở file txt có sẵn không? Mở file lên mà chẳng thay đổi gì thì bác Bill đâu có hỏi Save
 
Upvote 0
Chuẩn rồi ! anh bắt đúng bệnh rồi ! Thanks anh thêm lần nữa}}}}}}}}}}}}}}}}}}}}

Mình nói thêm: Mấy câu bạn vừa hỏi mà lại cho vào topic DÀNH CHO CÁC THÀNH VIÊN MỚI HỌC... sao?
Nếu đúng thật lính mới mà hỏi mấy câu này chắc mình.. TRỐN luôn quá
 
Upvote 0
Mình nói thêm: Mấy câu bạn vừa hỏi mà lại cho vào topic DÀNH CHO CÁC THÀNH VIÊN MỚI HỌC... sao?
Nếu đúng thật lính mới mà hỏi mấy câu này chắc mình.. TRỐN luôn quá
Dạ,Topic "Dành cho các thành viên mới học.." thì câu hỏi của em là "dành cho các thành viên mới học windowAPI" ^^
*Tại vì em biết topic này là anh lập ra --> anh theo dõi thường xuyên --> em post câu hỏi vào đây , chắc anh cũng không TRỐN luôn đâu :--=0,
* em thấy những ai post bài vào topic này đều có "quà" của anh hết --> nên em bắt chước làm theo thôi !

p/s : nếu mà anh thấy không hợp với topic , thì anh xóa hoặc di chuyển sang nơi khác hộ em !
 
Upvote 0
Dừng chương trình khi có điều kiện

Mã:
For  I = 1  to 10
     If a = b then
          For j=1 to 10 
               If c<d then …….
               End if
         Next
      End if
Next
Mình muốn nếu thỏa mãn điều kiện c<d thì chương trình sẽ dừng lại và lấy giá trị i và j lúc đấy. Vậy chỗ "if c<d then" sẽ phải viết thế nào vậy?
 
Upvote 0
Mã:
For  I = 1  to 10
     If a = b then
          For j=1 to 10 
               If c<d then …….
               End if
         Next
      End if
Next
Mình muốn nếu thỏa mãn điều kiện c<d thì chương trình sẽ dừng lại và lấy giá trị i và j lúc đấy. Vậy chỗ "if c<d then" sẽ phải viết thế nào vậy?
Thử viết như vầy xem nó có chạy đúng không
PHP:
For  I = 1  to 10
     If a = b then
          For j=1 to 10 
               If c<d then
 …….
Exit For
Exit For
               End if
         Next j
      End if
Next I
 
Upvote 0
Hổng chắc đâu 3T à,

Mình muốn nếu thỏa mãn điều kiện c<d thì chương trình sẽ dừng lại lấy giá trị i và j lúc đấy. Vậy chỗ "if c<d then" sẽ phải viết thế nào vậy?

Chương trình dừng lại thì dễ rồi (dùng lệnh End). Nhưng dừng xong rồi trị i, j lấy ra bỏ đâu thì tôi bí.
 
Upvote 0
Hổng chắc đâu 3T à,



Chương trình dừng lại thì dễ rồi (dùng lệnh End). Nhưng dừng xong rồi trị i, j lấy ra bỏ đâu thì tôi bí.
Thì cái chỗ .... ở dưới If.. then tác giả muốn nó lấy và ghi vào đâu thì tác giả tính, đến đó thì I và J đều không chạy nữa rối mà.
Ví dụ [J1].Value= I : [J2].Value= J chẵn hạn.
 
Upvote 0
Web KT

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

Back
Top Bottom