Chạy (execute) một dòng code

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Chạy (execute) một dòng code

Gửi bài by truongphu »

Thủ thuật: Chạy (execute) một dòng code
Tác giả: truongphu
Mô tả: EbExecuteLine : bổ sung bài Chạy (execute) một dòng code trong VBLib: Mục Các vấn đề khác. Có cảm giác bài nầy chưa hay lắm. Dòng lệnh cuối bị sai
* Cần text1 và text2. Command1
* Khi run: gõ biểu thức vào text1, vd 5*6+4 Xong nhấn command1, text2 ra kết quả

Mã: Chọn tất cả

Option ExplicitPrivate WithEvents AddedCommandButton As CommandButtonPrivate Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long Public Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean   ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0End FunctionPrivate Sub Command1_Click()ExecuteLine "var=" & Text1 & ":Form1.Text2.Text=var"End Sub 
Tập tin đính kèm
EbExecuteLine.rar
(1.5 KiB) Đã tải về 924 lần
Sửa lần cuối bởi 1 vào ngày truongphu với 0 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Re: EbExecuteLine : bổ sung bài trong VBLib

Gửi bài by truongphu »

ledoninh vừa giới thiệu code của thuongall từ diễn đàn cũ.
Tôi bê qua vì thấy cùng chức năng mà tiện dụng. Ai muốn dùng kiểu gì tùy ý
gửi bởi thuongall vào ngày Thứ 2 12/12/2005 9:36 am

Đây nè, thử code này xem sao:

Mã: Chọn tất cả

Private Sub Form_Load()    MsgBox ScriptControl1.Eval("(1+2)*3")End Sub
Chú ý phải Add Component Microsoft Script Control 1.0 rùi thả nó vào form nha!
---------------------------------
Ghi chú(truongphu):
* Cần text1 và text2. Command1
* Khi run: gõ biểu thức vào text1, vd 5*6+4 Xong nhấn command1, text2 ra kết quả

Mã: Chọn tất cả

text2 = ScriptControl1.Eval(Text1)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Các câu lệnh của ExecuteLine (hay EbExecuteLine)

Gửi bài by truongphu »

Các câu lệnh của ExecuteLine (hay EbExecuteLine)

A- Sub thi hành lệnh có ở Text1

Mã: Chọn tất cả

Private Sub Command1_Click()ExecuteLine (Text1.Text)End Sub
B- Viết lệnh ở Text1 (Lệnh đơn giản thông thường):

- Gọi Calc.exe

Mã: Chọn tất cả

Shell "calc.exe",vbNormalFocus
- Đổi màu Form1

Mã: Chọn tất cả

Form1.BackColor = vbRed
C- Khối lệnh ở text1

Mã: Chọn tất cả

X = msgbox("See!! It works!!!" &  vbCrLf & "Do you want to continue?", vbYesNo + vbInformation):If X = vbNo Then End
- Ghi chú: khối lệnh trên viết trong môi trường IDE sẽ là:

Mã: Chọn tất cả

"X = msgbox(" & Chr$(34) & "See!! It works!!!" & Chr$(34) & " &  vbCrLf & " & Chr$(34) & "Do you want to continue?" & Chr$(34) & ", vbYesNo + vbInformation)" & ":" & "If X = vbNo Then End"
D- Thực hiện phép toán:
Biểu thức viết ở Text1, ví dụ 3^2 + sin(3.1415926/4)

cấu trúc code ở Command2_Click: ExecuteLine "var=<Biểu thức>:<Nơi xuất kết quả>=var"
Lệnh cụ thể ở Command2_Click:

Mã: Chọn tất cả

ExecuteLine "X=" & Text1 & ":Form1.Text2=X"
(câu lệnh trên đã được dùng trong bài 1)

:<Nơi xuất kết quả> phải chỉ rõ :Form1.Text2. Nếu chỉ ghi :Text2 thì không nhận được
Ghi chú: Dấu ":" ở lệnh trên không phải ngắt dòng. Nếu tách chuỗi cấu trúc trên thành 2 dòng, kết quả sẽ sai

Xuất ra hộp thoại trường hợp trên

Mã: Chọn tất cả

ExecuteLine "X=" & Text1 & ":MsgBox X"
E- Thi hành Function ở Module
Dán vào Module function sau:

Mã: Chọn tất cả

Public Function HowAB(a As Long, b As Long) As String  HowAB = "Ans: " & a & " * " & b & " = " & a * bEnd Function
Text1 viết:

Mã: Chọn tất cả

msgbox HowAB(2,2),vbInformation
Command1_Click() như trên
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Một số lệnh của ScriptControl1 (xem bài 2)

Gửi bài by truongphu »

Một số lệnh của ScriptControl1

* ScriptControl1.Eval xem bài 2

Mã: Chọn tất cả

Private Sub Command6_Click()Text1 = "6*7-3"MsgBox ScriptControl1.Eval(Text1)End Sub
* ScriptControl1.ExecuteStatement

Mã: Chọn tất cả

      Private Sub Command2_Click()        Text1 = "msgbox ""The number of controls is: "" & ctrls.count"        ScriptControl1.ExecuteSt atement Text1.Text      End Sub
* ScriptControl1.AddCode
* ScriptControl1.Run

Mã: Chọn tất cả

Private Sub Command3_Click() Dim scDim strProgram As StringstrProgram = "Sub Main" & vbCrLf & "MsgBox ""Hello World""" & vbCrLf & "End Sub"ScriptControl1.Language = "VBScript"ScriptControl1.AddCode strProgramScriptControl1.Run "Main"End Sub 
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
NoBi
Quản trị
Quản trị
Bài viết: 971
Ngày tham gia: Thứ 3 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 57 times
Been thanked: 66 times
Tiếp xúc:

Re: Chạy (execute) một dòng code

Gửi bài by NoBi »

Bài gốc:
taykhongbatgiac đã viết:Mặc dù cái này không hay ho gì lắm, có thể còn tiếp tay cho kẻ phá hoại từ xa, nhưng nghĩ đi nghĩ lại, rồi mình cũng share lên đây. Cách này dùng thư viện VBA, một phương pháp thông dụng để tạo Macro trong các chương trình MS Office. Hạn chế của nó được quy định bởi VBA. Nguồn: sưu tầm.
Tập tin đính kèm
chaydongcode.zip
(2.17 KiB) Đã tải về 678 lần
:>
luckyst
Thành viên chính thức
Thành viên chính thức
Bài viết: 21
Ngày tham gia: Thứ 3 29/07/2008 8:32 am
Đến từ: Sóc Trăng
Has thanked: 1 time
Tiếp xúc:

Re: Chạy (execute) một dòng code

Gửi bài by luckyst »

Bài này quá hay Code của bác Nobi đưa lên tuyệt vời. =D> .

Hoan hô bác Nobi và Bác Sĩ TruongPhu !
Hình đại diện của thành viên
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: Thứ 3 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 times
Been thanked: 38 times
Tiếp xúc:

Re: Chạy (execute) một dòng code

Gửi bài by bangnhatquang68 »

bổ sung :Script Control
http://support.microsoft.com/kb/184740
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
Hình đại diện của thành viên
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1260
Ngày tham gia: Thứ 5 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Tiếp xúc:

Re: Chạy (execute) một dòng code

Gửi bài by VuVanHoanh »

Bác Phú ơi, cháu gặp một vấn đề khi sử dụng vba6.dll là: chạy trong Run Time thì được, nhưng build ra file và chạy thì: báo lỗi 53 nếu không có file vba6.dll ở cùng thư mục và crash file nếu có file vba ở cùng thư mục. Lúc này cháu k thực thi được lệnh nào bằng vba6.dll cả. Ngay cả MsgBox "abc" nó cũng k chạy :( hix, toi cháu rồi... :(( lỡ xài cái này để làm phần plugin, giờ thì hỏng... :((

p/s: đã test trên cả 7 và XP :(( đều bị crash, k có file vba6.dll thì báo thiếu :(( có thì crash :(( đăng ký đủ kiểu :(( hu hu hu
Since 2008...
One love! :x
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Re: Chạy (execute) một dòng code

Gửi bài by truongphu »

VuVanHoanh đã viết:Bác Phú ơi,
Các code trên chạy từ thời XP trở về trước. Đến nay đã vista, 7, 8... nên có lẽ một số code không tương thích là chuyện thường.
VuVanHoanh đã viết:khi sử dụng vba6.dll là: chạy trong Run Time thì được,
Đấy là chạy trên máy có đăng ký (cài vb6 tốt)
VuVanHoanh đã viết:build ra file và chạy thì: báo lỗi 53
Chạy trên máy vừa làm sẽ không sao, đưa máy khác mới bị vì thiếu vba6.dll
VuVanHoanh đã viết:nếu không có file vba6.dll ở cùng thư mục và crash file nếu có file vba ở cùng thư mục.
tùm bậy tùm bạ! file vba6.dll ưng nằm đâu cũng được, phải đăng ký cho nó đã chứ!

===

Vì dùng hàm EbExecuteLine trích từ thư viện vba6.dll nên rối...
Bạn có thể không dùng nó, chuyển sang dùng ScriptControl cho tiện, hơn nữa ScriptControl hổ trợ nhiều kiểu; tính biểu thức 1 dòng như trên (lệnh Eval) hoặc chạy nhiều dòng code (AddCode).
Để thuận tiện khỏi khai báo, ta dùng createobject
(Đương nhiên hy vọng các HĐH đời sau XP vẫn còn msscript.ocx)

Mã: Chọn tất cả

Set AAA = CreateObject("MSScriptControl.ScriptControl")
Xem cách dùng ở các bài viết trên.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
hoxuanhai
Thành viên chính thức
Thành viên chính thức
Bài viết: 14
Ngày tham gia: Thứ 5 12/07/2012 1:50 pm
Has thanked: 10 times

Re: Chạy (execute) một dòng code

Gửi bài by hoxuanhai »

bác phu ah em mới là dân học lập trình? bác phú cho em hỏi là trong visuabasic người ta thương dùng các ký tự để thay thể cho các kiểu như integer, hay là string tương ứng vơi đó là %, $ không biết ngoài 2 cái đó còn nhiều nữa không bác phú? thầy dạy em gọi là thủ thuật nhưng mới thấy lần đầu? không biết còn các kiểu ký hiệu tương tự vậy không? nếu bác mà còn thì liệt kê cho em với nha? cảm ơn bác phú nhiều!!!!
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Re: Chạy (execute) một dòng code

Gửi bài by truongphu »

hoxuanhai đã viết:integer, hay là string tương ứng vơi đó là %, $
ký tự hậu tố khiểu biến (suffix character)
double #
single !
currency @
long &
integer %
string $
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Đăng trả lời

Quay về