Buổi học VBA thứ 2, ngày 16/4/2006

  • Thread starter levanduyet
  • Ngày gửi
Khóa học Quản trị dòng tiền
M

M.Anh

Guest
28/12/05
46
0
0
Bắc Ninh
Chào các bạn!
Các bạn cho mình hỏi bao giờ thì ở Hà Nội mở lớp học VBA vậy!?
Mình ở ngoài bắc thì ko thể vào HCM học được.
Mong các bạn chỉ giúp!
Cảm ơn nhiều!
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear M.Anh,
------------
Theo mình được biết thì các "thầy/cô giáo" ở Hà Nội ai cũng cũng bận cả. Chưa ai "chịu trách nhiệm về vụ đánh bom" này nên đến giờ vẫn chưa có ý kiến về vấn đề này (hình như bạn là người đầu tiên).
Theo mình hiểu thì để tổ chức được thành công, lớp học phải hội đủ rất nhiều các yếu tố, trong đó yếu tố về nhu cầu và trình độ sử dụng MS Excel của các thành viên là yếu tố quyết định.
Căn cứ tình hình thực tế thì dường như nhu cầu về học MSE và kế toán của các thành viên ngoài Bắc thấp hơn các thành viên trong Nam. (Không biết có phải vì trình độ sử dụng MSE và VBA của các mem miền Bắc cao hơn các mem miền Nam không!).
Theo quan sát của tôi thì các thầy giáo Bắc vẫn đang theo dõi những thành công của các thầy giáo Nam để tổ chức lớp học mang tính đột phá hơn!
Bạn gắng chờ thêm nhé!
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
Đào Việt Cường nói:
Dear M.Anh,
------------
Theo mình được biết thì các "thầy/cô giáo" ở Hà Nội ai cũng cũng bận cả. Chưa ai "chịu trách nhiệm về vụ đánh bom" này nên đến giờ vẫn chưa có ý kiến về vấn đề này (hình như bạn là người đầu tiên).
Theo mình hiểu thì để tổ chức được thành công, lớp học phải hội đủ rất nhiều các yếu tố, trong đó yếu tố về nhu cầu và trình độ sử dụng MS Excel của các thành viên là yếu tố quyết định.
Căn cứ tình hình thực tế thì dường như nhu cầu về học MSE và kế toán của các thành viên ngoài Bắc thấp hơn các thành viên trong Nam. (Không biết có phải vì trình độ sử dụng MSE và VBA của các mem miền Bắc cao hơn các mem miền Nam không!).
Theo quan sát của tôi thì các thầy giáo Bắc vẫn đang theo dõi những thành công của các thầy giáo Nam để tổ chức lớp học mang tính đột phá hơn!
Bạn gắng chờ thêm nhé!

Đồng ý với ý kiến của Cường.
Chúng ta - Bắc vẫn quen dùng chiếc xe HONDA Dream màu mận chín để về quê, đưa bạn gái đi ăn kem bờ hồ. Nếu bây giờ dùng máy bay thì còn phải tính đã!
Tớ nhận thấy ở đâu có nhiều người dám đi tiên phong trong các lĩnh vực ở đó sẽ có nhiều thành quả tốt. Rõ ràng nhìn vào nền kinh tế thị trường giữa Bắc và Nam là hiểu phần nào.

Bản thân tôi tuy rất muốn nhưng chưa dám đề cập vấn đề này phần vì con còn nhỏ, vợ còn trẻ. Hehe! Nói vậy thôi, một ngày nào đó nếu nhận thấy các mem Bắc quan tâm, chúng tôi nhất định sẽ tổ chức và thực hiện "Lớp học..." tại Hà Nội.
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
? GiaiMa("MNDTVS")

Function GiaiMa(StringLeng As String) As String
StringLeng = UCase$(StringLeng)
StringLeng = Left(StringLeng, InStr(StringLeng, "M")) & "iền " & Mid(StringLeng, InStr(StringLeng, "M") + 1)
StringLeng = Left(StringLeng, InStr(StringLeng, "N")) & "am " & Mid(StringLeng, InStr(StringLeng, "N") + 1)
StringLeng = Left(StringLeng, InStr(StringLeng, "D")- 1) & "Đi " & Mid(StringLeng, InStr(StringLeng, "D") + 1)
StringLeng = Left(StringLeng, InStr(StringLeng, "T")) & "r­ước " & Mid(StringLeng, InStr(StringLeng, "T") + 1)
19 StringLeng = Left(StringLeng, InStr(StringLeng, "V")) & "ề " & Mid(StringLeng, InStr(StringLeng, "V") + 1)
1111 GiaiMa = Left(StringLeng, InStr(StringLeng, "S")) & "au!" & Mid(StringLeng, InStr(StringLeng, "S") + 1)
End Function
:angel: :dance2: :dzo:
 
Sửa lần cuối:
H

Hoang Trang Anh

Guest
20/4/06
2
0
0
Da nang
Chào các anh chị, tôi là thành viên mới. Tôi rất thích tham dự các buổi học về VBA, tôi có thể đăng ký bây giờ được không? Vui lòng hướng dẫn giúp thủ tục đăng ký và lệ phí nhé!
Cám ơn các anh, chi!
Hoàng Trang Anh
 
Thien Thanh_

Thien Thanh_

Trần Lạc Nhi
24/3/06
459
0
18
Miền Trung
Em đọc tài liệu buổi học VBA đầu tiên(hôm đó em ko đi học được) thấy có chỗ ko nắm được:
Một add_ins đọc số (thành chữ)hoặc một cách nào đó có thể làm được như vậy.
(trong phần record macro đầu tiên.)
Anh chị nào có thể nói rõ hơn dùm em được ko?!~
 
Sửa lần cuối:
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Thien Thanh_ nói:
Em đọc tài liệu buổi học VBA đầu tiên(hôm đó em ko đi học được) thấy có chỗ ko nắm được:
Một add_ins đọc số (thành chữ)hoặc một cách nào đó có thể làm được như vậy.
(trong phần record macro đầu tiên.)
Anh chị nào có thể nói rõ hơn dùm em được ko?!~
Có nghĩa là trong phần phiếu thu phiếu chi chúng ta cần một add_ins đọc số thành chữ để phiếu thu, chi của chúng ta được hoàn chỉnh. Trong phạm vi của bài học thứ nhất tất nhiên là không thể hướng dẩn mọi người làm add_ins này nên chúng ta tận dụng những gì có sẳn để làm thôi.
Còn câu "hoặc một cách nào đó có thể làm được như vậy" có nghĩa là việc đọc số thành chữ có thể không cần dùng đến Macro do vậy nếu thêm được vào thì không cần add-ins đọc số thành chữ.

Thông báo thêm: File nhật ký chung có macro mẫu theo hướng dẩn trong bài học buổi thứ 2:
View attachment 1576
 
H

Hoang Trang Anh

Guest
20/4/06
2
0
0
Da nang
Chào các anh, chị!
Buổi học kế tiếp là ngày nào vậy? Trang Anh mong được đăng ký tham gia học chương trình này.
Mong tin các anh chị.
Trang Anh
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Hoang Trang Anh nói:
Chào các anh, chị!
Buổi học kế tiếp là ngày nào vậy? Trang Anh mong được đăng ký tham gia học chương trình này.
Mong tin các anh chị.
Trang Anh
1. Bác để trú quán: Đà Nẳng! Liệu Bác có tham gia được ở Sài Gòn.
2. Bác đã xem các bài của buổi học 1 và 2 chưa ạh? Nếu đã xem và cho rằng việc đi học của bác là thích hợp thì xin mời.

Theo kế hoạch buổi học tiếp theo diển ra trong tháng 5. Nội dung sẽ post lên sau. Mong bác tiếp tục theo dõi ở đây để cập nhật thông tin.
 
T

thanhlongcom

Guest
9/6/06
6
0
0
Hà Nội
Tôi chạy đoạn mã sau:

Sub GreetMe1()
Dim ThoiGian As Long
ThoiGian = InputBox("Nhap thoi gian")
If ThoiGian < 12 Then
GoTo Chao1
ElseIf (ThoiGian >= 12 And ThoiGian < 18) Then
GoTo Chao2
ElseIf ThoiGian >= 18 Then
GoTo Chao3
End If
Chao1:
MsgBox "Chao buoi sang"
Chao2:
MsgBox "Chao buoi trua"
Chao3:
MsgBox "Chao buoi chieu"
End Sub

Kết quả:
Nếu Thoigian < 12: Hiện lần lượt Chao1, Chao2, Chao3.
Nếu 12 <= Thoigian < 18: Hiện lần lượt Chao2, Chao3.

Mong các bác chỉ giúp tại sao lại như vậy
Xin cảm ơn.
 
C

Cayman

Cao cấp
26/11/03
246
4
0
43
HCM
danketoan.com
thanhlongcom nói:
Tôi chạy đoạn mã sau:

Sub GreetMe1()
Dim ThoiGian As Long
ThoiGian = InputBox("Nhap thoi gian")
If ThoiGian < 12 Then
GoTo Chao1
ElseIf (ThoiGian >= 12 And ThoiGian < 18) Then
GoTo Chao2
ElseIf ThoiGian >= 18 Then
GoTo Chao3
End If
Chao1:
MsgBox "Chao buoi sang"
Chao2:
MsgBox "Chao buoi trua"
Chao3:
MsgBox "Chao buoi chieu"
End Sub

Kết quả:
Nếu Thoigian < 12: Hiện lần lượt Chao1, Chao2, Chao3.
Nếu 12 <= Thoigian < 18: Hiện lần lượt Chao2, Chao3.

Mong các bác chỉ giúp tại sao lại như vậy
Xin cảm ơn.



Theo mình đọc đoạn code của bạn thì nguyên nhân là do đoạn cuối cùng :
"Chao1:
MsgBox "Chao buoi sang"
Chao2:
MsgBox "Chao buoi trua"
Chao3:
MsgBox "Chao buoi chieu"

có nghĩa là bạn chạy gì thì nó cũng đến đó. Nếu giá trị > 12, nó sẽ thực hiện từ Chao2 trở đi, bạn thử xóa tất cả nội dung từ Dim đến End If thì kết quả là bạn nhập bất cứ giá trị nào cũng được kết quả lần lượt Chao 1,2,3 :friend:

Mình thử sửa lại như sau :


Do Until ThoiGian = True
If ThoiGian < 12 Then GoTo Chao1 Else
If (ThoiGian >= 12 And ThoiGian < 18) Then GoTo Chao2 Else
GoTo Chao3


Chao1:
MsgBox "Chao buoi sang"
Exit Do
Chao2:
MsgBox "Chao buoi trua"
Exit Do
Chao3:
MsgBox "Chao buoi chieu"
Exit Do
Loop
End Sub

Bạn test xem sao :drummer:

Đây chỉ suy nghĩ của người chẳng biết VBA là gì, hì hì. Hy vọng các cao thủ trong WKT sẽ giúp được bạn nhiều hơn.
 
Secret_grasses

Secret_grasses

Guest
thanhlongcom nói:
Nếu Thoigian < 12: Hiện lần lượt Chao1, Chao2, Chao3.
Nếu 12 <= Thoigian < 18: Hiện lần lượt Chao2, Chao3.

Mong các bác chỉ giúp tại sao lại như vậy
Xin cảm ơn.

Vì theo đoạn code của bạn:

+ Khi thoigian<12 thì nó goto đến chao1 và thực hiện tiếp chao2,chao3===>kq là hiện lần lượt 3 Msgbox

+Tương tự như vậy khi 12<=thoi gian<=18 thì sẽ goto đến chao2 và thực hiện tiếp chao3===>kq là hiện lần lượt 2 Msgbox

Bạn sửa lại như sau:

Sub GreetMe1()
___Dim ThoiGian As Integer
___ThoiGian = InputBox("Nhap thoi gian")
___If ThoiGian < 12 Then
_______GoTo Chao1
_______Chao1:
__________MsgBox "Chao buoi sang"
___ElseIf ThoiGian < 18 Then
_______GoTo Chao2
_______Chao2:
__________MsgBox "Chao buoi trua"
___Else
_______GoTo Chao3
_______Chao3:
__________MsgBox "Chao buoi chieu"
___End If

End Sub
 
Secret_grasses

Secret_grasses

Guest
Cayman nói:
Mình thử sửa lại như sau :
Do Until ThoiGian = True
If ThoiGian < 12 Then GoTo Chao1 Else
If (ThoiGian >= 12 And ThoiGian < 18) Then GoTo Chao2 Else
GoTo Chao3


Chao1:
MsgBox "Chao buoi sang"
Exit Do
Chao2:
MsgBox "Chao buoi trua"
Exit Do
Chao3:
MsgBox "Chao buoi chieu"
Exit Do
Loop
End Sub

Bạn test xem sao :drummer:

Đây chỉ suy nghĩ của người chẳng biết VBA là gì, hì hì. Hy vọng các cao thủ trong WKT sẽ giúp được bạn nhiều hơn.

Hì hì, Cayman hổng biết gì về VBA mà nhận xét được lỗi lại còn đưa ra phương án trả lời nữa, vậy có tin được ko ha!:freddy:
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Bắt lỗi nhập TG:

Tôi có đoạn mã sau:
Sub GreetMe1()
Dim ThoiGian As Long
. . .End Sub
Kết quả: Nếu Thoigian < 12: Hiện lần lượt Chao1, Chao2, Chao3.
Nếu 12 <= Thoigian < 18: Hiện lần lượt Chao2, Chao3.
Theo mình bạn nên khai báo 1 biến chuỗi nữa; mọi việc sẽ sáng sủa hơn nhiều":
Sub GreetMe()
Dim ThoiGian As Long: Dim SChuoi As String
SChuoi = " buỗi "
ThoiGian = InputBox("Nhap thoi gian")
If ThoiGian < 12 Then
SChuoi = SChuoi & "sáng"
ElseIf (ThoiGian >= 12 And ThoiGian < 18) Then
SChuoi = SChuoi & "trưa"
ElseIf ThoiGian >= 18 Then
SChuoi = SChuoi & "chiều"
else
Schuoi = "tạm biệt"
End If
MsgBox "Chao " & SChuoi & "!"
End Sub
 
Sửa lần cuối:
H

hanhtcdn

Guest
31/3/04
13
0
0
Mình không hiểu được bao nhiêu về Excel nhưng thấy các bạn có nhiều ý kiến hay nên mình mạn phép trao đổi thêm. Góp ý của các bạn rất hay, càng về sau càng gọn nhưng theo mình có lẽ chưa thõa mãn được yêu cầu của bạn thanhlongcom vì ban thanhlongcom muốn rẽ nhánh để thực hiện hàng loạt các vấn đề bằng chương trình con vì thế mình mượn ý tưởng của bạn Cayman và thủ đề xuất xem sao:
Sub GreetMe1()
Dim ThoiGian As Long
ThoiGian = InputBox("Nhap thoi gian")
Do Until ThoiGian = True
If ThoiGian < 12 Then
GoTo Chao1
ElseIf (Thoigian >= 12 and ThoiGian < 18) Then
GoTo Chao2
ElseIf ThoiGian >= 18 Then
GoTo Chao3
End If
Chao1:
MsgBox "Chao buoi sang"
Exit Do
Chao2:
MsgBox "Chao buoi trua"
Exit Do
Chao3:
MsgBox "Chao buoi chieu"
Exit Do
Loop
End Sub
Hy vọng chương trình có thể chạy đựoc theo ý của tác giả.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Vẽ chuyện!

Sub GreetMe1()
Do
. . .
Chao1:MsgBox "Chao buoi sang"
Exit Do
Chao2: MsgBox "Chao buoi trua"
Exit Do
Chao3:MsgBox "Chao buoi chieu"
Exit Do
Loop
End Sub
Hy vọng chương trình có thể chạy đựoc theo ý của tác giả.
Lại thêm 1 anh thích lôi thôi đây!
Ngay tại CTrình của tác giả; nếu thích xài GoTo thì sau mỗi dòng MSGBOX(...) phải thêm câu lệnh trong dòng là:
: Exit Sub là tốt rồi! "Đi đâu loang quanh cho đời mõi mệt!" (Nhạc Trịnh)
/(/hưng theo mình biết thường thì lệnh gâutu để bắt lỗi CT mà ít xài vô việc #, vạn bất đắc dĩ! (/ì dễ To Go lắm ru!
Sub BatLoi()
On Eror GoTo Loi_BatLoi
9 . . . .
13 . . . .
Err_BatLoi: Exit Sub
Loi_BatLoi:
Select Case Err
Case 9
Resume Next
Case 13
Msgbox Error$
Case Else
Msgbox Str(erl) & str(err)
End Select
Msgbox Error$: Resume Err_BatLoi
End Sub
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear all,
--------
Mình xin góp ý một chút vì có lẽ đây cũng là bài học đầu tiên của mình.
Theo mình trước khi làm việc với Visual Basic, điều đầu tiên và quan trọng nhất là phải hiểu rõ yêu cầu của bài toán, xây dựng cách làm để có được cách vận dụng linh động nhất. Đương nhiên, hiểu được các cấu trúc rẽ nhánh cũng như cú pháp từng câu lệnh trong VBA là yêu cầu không thể thiếu...
Nói thì dài dòng vậy thôi, cụ thể ở đây mình muốn minh hoạ cách thức để các bạn có lựa chọn các cách giải hay nhất (và phủ hợp với sở trường của mình nữa):
Bài toán:
1. Đầu vào:
Đưa vào một số: yêu cầu số nhập vào là một số nguyên và không lớn hơn 24
2. Đầu ra:
Kết thúc chương trình, chương trình phải cung cấp thông điệp dựa vào tham số đưa vào:
- Nếu 0 >= số đưa vào < 12: lời chào là "Chào buổi Sáng!"
- Nếu 12 >= số đưa vào < 18: lời chào là "Chào buổi Trưa!"
- Nếu số đưa vào không thoả mãn hai điều kiện trên thì lời chào là "Chào buổi Tối!"
Phân tích:
- Chúng ta cần ít nhất một tham số để nhận số nguyên đưa vào chương trình.
- Cần phải kiểm tra số mà người dùng đưa vào có phải là:
+ Kiểu số
+ Số nguyên
+ Không lớn hơn 24
Vì nếu không kiểm tra các điều kiện này thì dù chương trình có hay đến mấy cũng... Runtime Error!
- Trong trường hợp số nhập vào không thoả mãn các điều kiện trên, yêu cầu người dùng nhập lại hoặc thoát khỏi chương trình.
- Có thể viết chương trình này dưới dạng hàm hoặc thủ tục. Trong trường hợp này nên là hàm vì nó cung cấp cho chúng ta kết quả xử lý, và kết quả đó có thể được kế thừa (đặc trưng của hàm).

Nào, hãy diễn giải cách làm bằng ngôn ngữ... VN (Việt Nam) (chứ không phải ngôn VB):
Bước 1. Bắt đầu:
- Khai báo biến số đầu vào kiểu số nguyên (Long Interger), tạm gọi là biến <Thời gian>
- Khai báo biến số đầu ra kiểu chuỗi (String) lưu lại kết quả, tạm gọi là <Kết quả>. Lưu ý, nếu chúng ta xây dựng chương trình là một hàm thì có thể sử dụng luôn hàm này để chứa kết quả mà không cần khai báo biến đầu ra.
Bước 2. Kiểm tra dữ liệu do người dùng đưa vào:
- Nếu số đưa vào không phải là kiểu số thì thông báo cho người dùng biết phải nhập đúng kiểu số (và thông báo luôn cho người dùng biết là số nhập vào phải là số nguyên dương không lớn hơn 24 để chương trình khỏi bắt lỗi sau và hỏi luôn người dùng muốn nhập tiếp hay nghỉ!)
-Nếu số đưa vào không phải là số nguyên thì thông báo cho người dùng phải nhập số một số nguyên (cũng thông báo luôn cho họ biết là số đó phải thuộc dãy 1:24 để chương trình khỏi phải bắt lỗi sau và hỏi luôn người dùng muốn nhập tiếp hay nghỉ)
-Nếu số đưa vào là số lớn hơn số 24 thì thông báo cho người dùng phải nhập số một số nguyên thuộc dãy 1:24 và hỏi luôn người dùng muốn nhập tiếp hay nghỉ!
Theo mình, nếu tham số đưa vào dễ hiểu được mô tả rõ ràng thì chỉ cần một lần kiểm tra với một thông báo lỗi tổng hợp của cả ba trường hợp.
Bước 3. Kết quả kiểm tra:
- Số đưa vào không thoả mãn: Người dùng "muốn chơi" hay "muốn nghỉ":
+ Nếu "muốn nghỉ": kết thúc chương trình (không quên lời chào thân ái và hẹn gặp lại để họ không bị ngẩn ngơ)
+ Nếu vẫn "muốn chơi": Quay trở lại bước 2
- Số đưa vào thoả mãn:
+ Xử lý dữ kiện theo điều kiện kiểm tra
(như phần mô tả đầu ra)
+ In kết quả và kết thúc chương trình
Đến đây thì việc coding các bạn có thể nhờ các cao thủ EFC, sẽ có rất nhiều đoạn chương trình tuyệt hảo.
Các bạn thấy đấy, mặc dù bài toán rất đơn giản song các bạn nên cố gắng tư duy trước khi "Alt+F11". Vì khi động đến các bài toán phức tạp hơn nếu các bạn không vạch trước hướng đi, chắc chắn các bạn sẽ bị lạc (mình không dám chắc lúc đấy Ctrl+Alt+Del có còn hoạt động không nữa!). Các bạn cũng nên cố gắng tư duy để tìm ra các trường hợp dễ gây ra lỗi nhất. Ban đầu hãy tự mình kiểm tra lỗi và kiểm soát nó. Khi đã thành thạo rồi thì tìm hiểu thêm đối tượng Err (bao gồm 2 thuộc tính rất hữu ích là Number và Description)
Nào hãy tự mình viết các chương trình nhỏ nhưng phải bao quát đầy đủ các tình huống có thể xảy ra. Chúc các bạn thành công nhé!
 
Sửa lần cuối:
C

Cayman

Cao cấp
26/11/03
246
4
0
43
HCM
danketoan.com
Secret_grasses nói:
Hì hì, Cayman hổng biết gì về VBA mà nhận xét được lỗi lại còn đưa ra phương án trả lời nữa, vậy có tin được ko ha!:freddy:
Cái này là cayman nói thiệt tình á ! Chỉ là cayman thấy người ta làm, dòm vô chút chút rồi hiểu chút chút thôi, chứ secret hổng thấy là cách làm của cayman không có hiệu quả sao, chỉ được cái là giải quyết vấn đề thôi. còn hay thì chưa hay. Các cao thủ sẽ bảo cách của cayman là lộn xộn, hi hi ...
 

Xem nhiều

Webketoan Zalo OA