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
Cho em hỏi có cách nào khi người dùng save file, thì sẽ tự động chạy 1 macro mình đã viết sẵn không. Tưng tự như "Sub Auto open" khi file được mở ra sẽ chạy 1 macro đã viết sẵn. Thanks
Nếu bạn tìm được cách nào đó mà bằng tay làm được thao tác gán comment 1 lượt thì code sẽ làm đượcCho mình hỏi một vấn đề như sau :
- Mình có một mảng Arr chứa các thông tin --> bh mình muốn đưa toàn bộ dữ liệu mảng này xuống vùng [A1 :A1000] dưới dạng comment
---> có cách nào không dùng vòng lặp for để thực hiện việc trên không
Cho em hỏi là trong excel có lệnh nào mà gán 1 nhát xuống sheet hết các comment kiểu như là [A1:A1000] = Arr không ?![]()
Vậy thì tại cell bất kỳ của cột B tạo 1 sự kiện change để kích hoạt mở userform. Rồi trong userform tiếp tục gán sự kiện đóng form và chuyển kết quả đến cell cần đến.mình đang tập viết những ứng dụng nhỏ phục vu cho công việc nhưng găp những vướng mắc nhờ mọi người giúp đỡ, mình nói qua những cái mình đã làm
1. Lập được uerform (đã làm được)
2. Bây giờ mình muốn từ 1 cell bất kỳ của cột đã định trước cột (cột B) chỉ khi nào ấn ENTER là gọi userform lên làm việc (form này có listbox chứa sắn dữ liệu) bây giờ mình muốn là chọn xong dữ liệu thì form tắt đồng thời dữ liệu được điền vào cell vừa rồi mình ấn ENTER.
Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổnVậy thì tại cell bất kỳ của cột B tạo 1 sự kiện change để kích hoạt mở userform. Rồi trong userform tiếp tục gán sự kiện đóng form và chuyển kết quả đến cell cần đến.
Khi dùng sự kiện change thì phải biết sử dụng câu lệnh Application.EnableEvents=False để khống chế lỗi vòng lặp vô tận.Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổn
mình đang vướng mắc
1. làm sao xác định sự kiện ấn ENTER
2. Trả về dòng con trỏ đang đứng để đưa thông tin vào
Cám ơn bạn vấn đề là ở chổ này tại ô B3 ấn ENTER sau đó lại thay kết quả vào ô B3 lúc đó sự kiện change sẽ lặp lại userform lại load lên mình thấy không ổn
mình đang vướng mắc
1. làm sao xác định sự kiện ấn ENTER
2. Trả về dòng con trỏ đang đứng để đưa thông tin vào
Sub EventEnable()
Application.OnKey "~", "ShowForm"
End Sub
Sub EventDisable()
Application.OnKey "~", ""
End Sub
Sub ShowForm()
UserForm1.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$3" Then
EventEnable
Else
EventDisable
End If
End Sub
Cám ơn Thầy1> Code cho Module:
2> Code cho sự kiện SelectionChange (trên sheet)Mã:Sub EventEnable() Application.OnKey "~", "ShowForm" End Sub Sub EventDisable() Application.OnKey "~", "" End Sub Sub ShowForm() UserForm1.Show End Sub
Làm đại, chưa biết trúng không! Bạn kiểm tra xemMã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$B$3" Then EventEnable Else EventDisable End If End Sub
-------------------
Phần gán dữ liệu từ UserForm xuống, bạn tự làm nhé
làm theo cách của bạn mình đã làm được nhưng lại phát sinh lỗi khi xóa dữ liệu userform lại bị load lênKhi dùng sự kiện change thì phải biết sử dụng câu lệnh Application.EnableEvents=False để khống chế lỗi vòng lặp vô tận.
1> Code cho Module:
2> Code cho sự kiện SelectionChange (trên sheet)Mã:Sub EventEnable() Application.OnKey "~", "ShowForm" End Sub Sub EventDisable() Application.OnKey "~", "" End Sub Sub ShowForm() UserForm1.Show End Sub
Làm đại, chưa biết trúng không! Bạn kiểm tra xemMã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$B$3" Then EventEnable Else EventDisable End If End Sub
-------------------
Phần gán dữ liệu từ UserForm xuống, bạn tự làm nhé
Xài thử Sub này cho cái Button của bạn coi saoChào các anh chị giaiphapexcel,
em có vấn đề nhỏ cần nhờ anh chị giải quyết giúp. Anh chị xem ở file em gửi kèm, bây h em muốn khi mình chọn mã số NV xong click vào button thì số công nhân viên đó được cộng thêm 1 đúng vào dòng đó ở bên bảng dữ liệu.
giúp em với nhé!
Public Sub GPE()
Application.ScreenUpdating = False
Dim Rng As Range, Cll As Range, Tem As String
Tem = UCase([C3])
With Sheets("S2")
Set Rng = .Range(.[A4], .[A65000].End(xlUp))
For Each Cll In Rng
If UCase(Cll) = Tem Then
Cll.Offset(, 2).Value = Cll.Offset(, 2).Value + 1
Exit For
End If
Next
End With
Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
Cảm ơn nhapmon đã giúp đỡ nhưng mà chưa được bạn ạ!
vd công của nv1 đang là 7 thì nếu chuyển sáng nv2 nó cộng luôn lên bằng 8ý mình là muốn cộng thêm công cho mỗi NV riêng biệt không liên quan đến nhau, nhờ bạn giúp.
Cảm ơn nhapmon đã giúp đỡ nhưng mà chưa được bạn ạ!
vd công của nv1 đang là 7 thì nếu chuyển sáng nv2 nó cộng luôn lên bằng 8ý mình là muốn cộng thêm công cho mỗi NV riêng biệt không liên quan đến nhau, nhờ bạn giúp.
Click vào Module1 - ấn F4.Các anh chị trong GPE cho mình hỏi : làm thế nào để thay đổi tên module1 ( trong VBA ) thành tên khác được không ?
Ví dụ Module1 --> rename thành abcxyz ....?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlCalculationAutomatic
If Chk = False Then
Cancel = True
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("tb_2") & """,2)")
Else
If Workbooks.Count = 1 Then ThisWorkbook.Close
End If
Application.Caption = ""
End Sub
Private Sub Workbook_Open()
Sheets("Main").Select
Application.Calculation = xlCalculationManual
End Sub
Dòng màu đỏ bạn cho vào Sub CloseWb là được rồiKhi đóng File thì muốn Excel trả về chế độ Automatic
-------------------------------------------------------
Em có 1 File Excel khi mở thì đưa về chế độ Application.Calculation = xlCalculationManual
Khi đóng file thì em muốn nó trở về chế độ Application.Calculation = xlCalculationAutomatic
Nhưng thực tế khi đóng file thì nó vẫn ở chế độ Manual
Code trong Thisworkbook
Vui lòng giúp em sửa code để khi đóng file thì trả về chế độ AutomaticMã:Private Sub Workbook_BeforeClose(Cancel As Boolean) [COLOR=#ff0000]Application.Calculation = xlCalculationAutomatic[/COLOR] If Chk = False Then Cancel = True Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("tb_2") & """,2)") Else If Workbooks.Count = 1 Then ThisWorkbook.Close End If Application.Caption = "" End Sub Private Sub Workbook_Open() Sheets("Main").Select Application.Calculation = xlCalculationManual End Sub
em cảm ơn
Em đã cho vào sao chưa thấy có kết qủaDòng màu đỏ bạn cho vào Sub CloseWb là được rồi
Sub CloseWb()
Dim Ans As Long
With CreateObject("WScript.Shell")
Ans = .Popup(Evaluate("tb_1"), , "THÔNG BÁO", vbYesNoCancel)
End With
If Ans <> 2 Then
Chk = True
ThisWorkbook.Close (Ans = 6)
[COLOR=#0000ff][B] Application.Calculation = xlCalculationAutomatic[/B][/COLOR]
End If
End Sub
Em đã cho vào sao chưa thấy có kết qủa
Thầy xem giúp em
Mã:Sub CloseWb() Dim Ans As Long With CreateObject("WScript.Shell") Ans = .Popup(Evaluate("tb_1"), , "THÔNG BÁO", vbYesNoCancel) End With If Ans <> 2 Then Chk = True ThisWorkbook.Close (Ans = 6) [COLOR=#0000ff][B] Application.Calculation = xlCalculationAutomatic[/B][/COLOR] End If End Sub
Sub CloseWb()
Dim Ans As Long
With CreateObject("WScript.Shell")
Ans = .Popup(Evaluate("tb_1"), , "THÔNG BÁO", vbYesNoCancel)
End With
If Ans <> 2 Then
[COLOR=#0000ff][B] Application.Calculation = xlCalculationAutomatic[/B][/COLOR]
Chk = True
ThisWorkbook.Close (Ans = 6)
End If
End Sub
nhờ các anh giúp em vấn đề này:
em muốn mỗi khi mình nhấn button thì dữ liệu ở bảng sheet1 sẽ cập nhật liên tục thành dòng sang sheet 2. em cảm ơn!
Mình cũng thấy bài này dùng công thức vừa gọn nhẹ, lại thông dụng ----> hay bây giờ xu thế là phải phức tạp, màu mè cho giống chuyên nghiệp nhj ?Thực ra dùng công thức cũng được mà bạn
Alt + F11 sẽ dẫn bạn vào cửa sổ VBE, là nơi để bạn code. Nó giống như là một môi trường để bạn làm việc chứ nó không có cái hướng dẫn cho bạn làm gì cụ thể cả.Chào mọi người!
cho em hỏi ở các topic trước mọi người bảo muốn hiểu về macro thì nhấn Alt+ F11 tìm hiểu. nhưng em mở ra toàn tiếng anh không à. xem ko hiểu gì hết? mọi người ai biết chỉ dùm mình với ạ?
hỏi về cách sử dụng mảng:
chào mọi người tôi đang học mảng trong vba, sao thấy khó nuốt. anh chị chỉ giúp đoạn code sau
Sub Array_sao_kho_qua()
Dim l As Long, m As Long
vArr = Range("A1:B10").Value
For l = LBound(vArr, 1) To UBound(vArr, 1)
For m = LBound(vArr, 2) To UBound(vArr, 2)
If vArr(l, m) = "heo" Then
''''viet gi o day
End If
Next m
Next l
Range("C1020").Value = vArr
End Sub
bây giời tôi muốn, cái nào bên cột A là "heo" thì chép nó qua C10:C?
Chắc là vầy chăng:hỏi về cách sử dụng mảng:
chào mọi người tôi đang học mảng trong vba, sao thấy khó nuốt. anh chị chỉ giúp đoạn code sau
Sub Array_sao_kho_qua()
Dim l As Long, m As Long
vArr = Range("A1:B10").Value
For l = LBound(vArr, 1) To UBound(vArr, 1)
For m = LBound(vArr, 2) To UBound(vArr, 2)
If vArr(l, m) = "heo" Then
''''viet gi o day
End If
Next m
Next l
Range("C1020").Value = vArr
End Sub
bây giời tôi muốn, cái nào bên cột A là "heo" thì chép nó qua C10:C?
Sub Array_sao_kho_qua()
Dim tmp, arr, vArr
Dim lR As Long, lC As Long, n As Long
vArr = Range("A1:B10").Value
ReDim arr(1 To UBound(vArr, 1), 1 To UBound(vArr, 2))
For lR = LBound(vArr, 1) To UBound(vArr, 1)
tmp = vArr(lR, 1)
If tmp = "heo" Then
n = n + 1
For lC = LBound(vArr, 2) To UBound(vArr, 2)
arr(n, lC) = vArr(lR, lC)
Next
End If
Next
If n Then Range("C1:D1").Resize(n).Value = arr
End Sub
cám ơn 2 anh, tôi bắt đầu dzọc vba gần năm rùi, mà nón nay đúng là khó nuốt quá. hồi trước tới giờ né nó luôn...hi,...hi. bi giờ thử học coi có làm nổi ko....còn khó quà thì thui...hi..hi
tôi có đọc một số bài của tác giả lê văn việt, nhưng càng đọc càng lùng bùng
cái gì mà dim rùi lại redim, rùi mảng một chiều 2 chiều.....
thử học xem có làm được ko, có gì nhờ các anh chỉ dạy.....
cám ơn các anh nhiều.
Thật ra nếu học phần mảng 1 chiều và 2 chiều chỉ cần 1 ngày là hiểu. Khó nuốt là lúc mình vận dụng vào bài thực tế. Mảng thật ra là những bảng tính ảo nằm trên bộ nhớ thôi. Cũng có cột và dòng. Muốn làm gì tại cột nào dòng nào thì gọi đúng phần tử đó giống như gọi 1 ô trên bảng tính thôi. Ví dụ mình có 1 mảng Arr = [B5:C10].value có nghĩa là mình có 1 mảng Arr gồm 6 dòng và 2 cột. Cứ cày thật sự trong 1 tuần là nhuần nhuyễn. Bảo đảm.cám ơn 2 anh, tôi bắt đầu dzọc vba gần năm rùi, mà nón nay đúng là khó nuốt quá. hồi trước tới giờ né nó luôn...hi,...hi. bi giờ thử học coi có làm nổi ko....còn khó quà thì thui...hi..hi
tôi có đọc một số bài của tác giả lê văn việt, nhưng càng đọc càng lùng bùng
cái gì mà dim rùi lại redim, rùi mảng một chiều 2 chiều.....
thử học xem có làm được ko, có gì nhờ các anh chỉ dạy.....
cám ơn các anh nhiều.
Em có file (đính kèm) muốn tạo 1 nút bấm có giá trị thay đổi tương ứng với giá trị của ô A1
Nhờ các bác, các cao thủ giúp cho.
AndOrNot
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Buttons("Button 1").Text = Target.Value
End Sub
Code vầy là được rồi
Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Buttons("Button 1").Text = Target.Value End Sub
Code vầy là được rồi
Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Buttons("Button 1").Text = Target.Value End Sub
Ôi... mấy vụ kế toán, xuất, nhập, tồn gì gì đó đừng kêu tôi... tôi chẳng biết gì đâu
Record Macro là có code ngay mà :vì không rành VBA lắm nên xin mọi người giúp em vụ này với ạ!
em muốn insert một số n dòng ( n là giá trị của 1 ô trong bảng tính, và tất nhiên n là số nguyên bất kì > 0)^^!
cảm ơn mọi người rất nhiều!
thanks for watching!
Các anh cho hỏi trong VBA , em muốn khai báo một mảng là hằng số thì cú pháp như thế nào :
em thử : Const abc as string = Array ( "a","b","c" ) mà không được
Hổng có vụ này đâu, khỏi suy nghĩ. Mảng là mảng còn hằng số là hằng số
Public Arr()
Sub Const_Arr()
Arr = Array("ab",....)
end sub
-------------------------------------
Sub Main()
Call Const_Arr
......................................
end sub
Thì đương nhiên là vậy rồiÁc nhj, giả sử em có một mảng Arr() dữ liệu , bây giờ muốn sửa dụng được mảng này trong tất cả các sub thì hổng lẽ phải chơi kiểu này ah :
PHP:Public Arr() Sub Const_Arr() Arr = Array("ab",....) end sub ------------------------------------- Sub Main() Call Const_Arr ...................................... end sub
--> Nếu gặp trường hợp như em : anh sẽ giải quyết thế nào ! chia sẻ với em với![]()
ok , em đã hiểu thanks anh nhiềuThì đương nhiên là vậy rồi
- Khai báo arr dạng Public
- Khi chạy code, để khỏi phải mất công gọi đi gọi lại nhiều lần, ta sửa thằng Sub Const_Arr() thành Sub Autpen() là được rồi (chạy 1 lần duy nhất khi khởi động file thôi)
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
Sub Test()
Dim rng As Range
On Error Resume Next
Set rng = Range("A:A").SpecialCells(4)
If Not rng Is Nothing Then MsgBox rng.Areas(1).Cells(1, 1).Address
End Sub
cho nó cái vòng lập để dò tìm , khi dò ra cho hiện thi tên ô và cho nó cái exit sub kế tiếp (vì đã xong việc) nữa là đc thôinhờ 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
Bạn thử dòng lệnh nàynhờ 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
[A:A].Find("", [A65536], , 1, , 1).Activate
Ta có thể thí nghiệm dùng SpecialCells
Mã:Sub Test() Dim rng As Range On Error Resume Next Set rng = Range("A:A").SpecialCells(4) If Not rng Is Nothing Then MsgBox rng.Areas(1).Cells(1, 1).Address End Sub
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
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
Cái dòng code này được khôngnhờ 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 & Không đượcCái dòng code này được không
MsgBox [A1].End(4).Offset(1).Address
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.Đượ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ả ????
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
Sub GPE()
[A1:G8].Copy [H1:N8]
End Sub
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
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
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...)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 <--------- ?![]()
Dùng hàm này thử xem:*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 !
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
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 !
Chuẩn rồi ! anh bắt đúng bệnh rồi ! Thanks anh thêm lần nữa![]()
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" ^^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á
For I = 1 to 10
If a = b then
For j=1 to 10
If c<d then …….
End if
Next
End if
Next
Thử viết như vầy xem nó có chạy đúng khôngMì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?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
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
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ì 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à.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í.
Em mới tập tành code vba nên Em cần xin code 1 hàm (Function) tính tổng của cell trong vùng chọn ( tất nhiên là em biết trong excel đã có hàm sum). Bác nào có thể giúp em để em tham khảo với nhé. Tks các bác nhiều
Ý tôi là:
Nếu chỉ thoát khỏi vòng lặp (exit for) thì i, j còn đó.
Nếu thoát khỏi sub/function (exit sub/function) thì nếu i, j là biến nội thì chúng bị giải toả hêt. Phải đặt là biến toàn cục mới còn.
Nếu dừng chương trình (lời của chủ đề, tức là end) thì biến gì cũng mất hết. Phương pháp nào đó để moi lại hay giữ thì tôi chưa học tới.
Trong trường hợp thứ 3, nếu muốn giữ thì phải giữ trước khi thoát chứ không thể "...dừng lại và lấy giá trị..." được
Người hỏi bài này cần học lại về phạm vi của biến, chương trình con và chương trình chính, và dùng đúng từ ngữ.
Bài của bác Ba Tê là thỏa ý người hỏi rồi. Bài của bạn tuy đúng nhưng làm người ta sợ. Tôi đã học VBA 5 năm nay nhưng cũng chưa học đến những bài này. Với những bạn mới học VBA thì cứ tà tà làm tới đâu học tới đó, không cần quan tâm bắt đầu từ đâu, càng đơn giản hóa vấn đề càng dễ học hỏi, cái gì cần biết thì dần dần sẽ biết (có lẽ do mình bảo thủ chăng ?).
Nếu điều trên không đúng thì tôi xin lỗi mọi người và hứa rằng kể từ nay tôi không nói chuyện về cách thức làm việc nữa.
For I = 1 to 10
If a = b then
For j=1 to 10
If c<d then Exit For[COLOR=#008000] ' nhảy ra khỏi vòng trong[/COLOR]
End if
Next
If j <= 10 Then Exit For[COLOR=#008000] ' nhảy ra khỏi vòng ngoài[/COLOR]
End if
Next
[COLOR=#008000]' ở đây có thể lấy trị i, j.
' Tuy nhiên vì vòng lặp j chứa trong điều kiện If a = b cho nên trị j là trị chỉ có ý nghĩa tuỳ theo điều kiện
' Cách tốt hơn là lấy i, j ngay lúc thoả điều kiện c<d và dùng lệnh goto để nhảy vào một label nghay sau hai vòng lặp
[/COLOR]
Trở lại vấn đề câu hỏi. Câu hỏi dùng từ "dừng chương trình" nên tôi mới đề nghị dùng lệnh "end"
Nếu nguời hỏi muốn biết làm cách nào để thoát ra khỏi 2 vòng lặp thì phải làm như sau:
...Mã:For I = 1 to 10 If a = b then For j=1 to 10 [COLOR=#ff0000]If c<d then Exit For [/COLOR][COLOR=#008000]' nhảy ra khỏi vòng trong[/COLOR] [COLOR=#ff0000]End if[/COLOR] Next [COLOR=#ff0000]If j <= 10 Then Exit For[/COLOR][COLOR=#008000] ' nhảy ra khỏi vòng ngoài[/COLOR] End if Next [COLOR=#008000]... [/COLOR]
VetMini hoặc bạn nào biết giúp mình câu hỏi này:
Khi viết If .... Then .... thì không cần phải End if (giống như câu lệnh If j <= 10 Then Exit For ở trên)
Vậy tại sao trong đoạn mã dưới đây đã If c<d then Exit For rồi mà vẫn phải End if ?
If c<d then Exit For ' nhảy ra khỏi vòng trong
End if
Câu hỏi thành tâm, không có ý gì khác nếu như đoạn code trên có sơ xuất. Thanks !
VetMini
Cấu trúc Then ... bảo compiler rằng điểm nhảy rẽ (nếu không thoả điều kiện) là lệnh (dòng) kế tiếp
Cấu trúc Then (xuống dòng) bảo compiler rằng điểm nhảy rẽ (nếu không thoả điều kiện) là dòng Else, ElseIf hoặc End If gần nhất.
=IF(ISTEXT(B3),DATE(RIGHT(B3,4),MID(B3,4,2),LEFT(B3,2)),B3)
1 cách thủ công:Xin chào Thầy cô và Anh Chị trong GPE!
Em đang gặp phải một tình trạng là file định dạng dữ liệu vừa kiểu ngày tháng năm và vừa kiểu dạng text.
Hiện giờ Em đã định dạng dữ liệu về kiểu "dd/mm/yyy" nhưng có một số dữ liệu kiểu text không thể chuyển đổi được mà buộc phải kích đúp chuột vào ô đó thì mới được.
Nếu dữ liệu ót thì không sao nhưng bảng dữ liệu cũng khá nhiều vì vậy Em muốn hỏi GPE có cách nào để chuyển đổi nhanh hơn không ạ!
Cụ thể hơn thì Thầy cô và Anh Chị xem file kèm ạ!
Em xin cảm ơn!
1 cách thủ công:
1/ Nhập số 1 vào 1 ô nào đó, Copy
2/ Chọn nguyên vùng dữ liệu muốn chuyển, Paste special - Multiply
3/ Format vùng vừa Paste kiểu Date mà bạn muốn.
4/ Xóa ô vừa nhập số 1 hồi nãy.
Không hiểu bạn làm kiểu gì và không biết dữ liệu của bạn có các dạng ra sao?Thầy ạ! Em làm như thế này Nhập số một theo các ngày tương ứng rồi sau đó Paste special - Multiply thì những giá trị dạng text nó vẫn là số 1 Thầy ạ!
Thầy có thể gửi video hướng dẫn lên con coi với được không ạ.
Cảm ơn Thầy!
Con làm như thế này Thầy ạ:Không hiểu bạn làm kiểu gì và không biết dữ liệu của bạn có các dạng ra sao?
Với dữ liệu như file mẫu của bạn ở trên thì tôi đã làm như vậy và đã ra kết quả là ngày tháng.
Con làm như thế này Thầy ạ:
[video=youtube;sUWYMqsPzT4]http://www.youtube.com/watch?v=sUWYMqsPzT4&feature=youtu.be[/video]
Thầy ạ! Em làm như thế này Nhập số một theo các ngày tương ứng rồi sau đó Paste special - Multiply thì những giá trị dạng text nó vẫn là số 1 Thầy ạ!
Thầy có thể gửi video hướng dẫn lên con coi với được không ạ.
Cảm ơn Thầy!