• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

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
User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Tue 13/01/2009 3:25 pm

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ả



Code: Select all

  1. Option Explicit
  2. Private WithEvents AddedCommandButton As CommandButton
  3. Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
  4.  
  5. Public Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
  6.    ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
  7. End Function
  8. Private Sub Command1_Click()
  9. ExecuteLine "var=" & Text1 & ":Form1.Text2.Text=var"
  10. End Sub
  11.  
Attachments
EbExecuteLine.rar
(1.5 KiB) Downloaded 873 times
Last edited by truongphu on Tue 13/01/2009 4:27 pm, edited 1 time in total.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Tue 13/01/2009 4:25 pm

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:

Code: Select all

  1. Private Sub Form_Load()
  2.     MsgBox ScriptControl1.Eval("(1+2)*3")
  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ả

Code: Select all

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

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Thu 15/01/2009 9:06 am

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

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

Code: Select all

  1. Private Sub Command1_Click()
  2. ExecuteLine (Text1.Text)
  3. End Sub


B- Viết lệnh ở Text1 (Lệnh đơn giản thông thường):

- Gọi Calc.exe

Code: Select all

  1. Shell "calc.exe",vbNormalFocus


- Đổi màu Form1

Code: Select all

  1. Form1.BackColor = vbRed


C- Khối lệnh ở text1

Code: Select all

  1. 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à:

Code: Select all

  1. "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:

Code: Select all

  1. 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

Code: Select all

  1. ExecuteLine "X=" & Text1 & ":MsgBox X"


E- Thi hành Function ở Module
Dán vào Module function sau:

Code: Select all

  1. Public Function HowAB(a As Long, b As Long) As String
  2.   HowAB = "Ans: " & a & " * " & b & " = " & a * b
  3. End Function


Text1 viết:

Code: Select all

  1. msgbox HowAB(2,2),vbInformation


Command1_Click() như trên
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Thu 15/01/2009 9:39 pm

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

* ScriptControl1.Eval xem bài 2

Code: Select all

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


* ScriptControl1.ExecuteStatement

Code: Select all

  1.      Private Sub Command2_Click()
  2.         Text1 = "msgbox ""The number of controls is: "" & ctrls.count"
  3.         ScriptControl1.ExecuteSt atement Text1.Text
  4.       End Sub


* ScriptControl1.AddCode
* ScriptControl1.Run

Code: Select all

  1. Private Sub Command3_Click()
  2.  
  3. Dim sc
  4. Dim strProgram As String
  5. strProgram = "Sub Main" & vbCrLf & "MsgBox ""Hello World""" & vbCrLf & "End Sub"
  6. ScriptControl1.Language = "VBScript"
  7. ScriptControl1.AddCode strProgram
  8. ScriptControl1.Run "Main"
  9. End Sub
  10.  
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

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

Postby NoBi » Sun 18/01/2009 10:51 am

Bài gốc:
taykhongbatgiac wrote: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.
Attachments
chaydongcode.zip
(2.17 KiB) Downloaded 624 times
:>

luckyst
Thành viên chính thức
Thành viên chính thức
Posts: 21
Joined: Tue 29/07/2008 8:32 am
Location: Sóc Trăng
Has thanked: 1 time
Contact:

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

Postby luckyst » Fri 23/01/2009 8:08 am

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 !

User avatar
bangnhatquang68
Guru
Guru
Posts: 791
Joined: Tue 26/01/2010 12:44 pm
Location: Vĩ tuyến 17
Has thanked: 20 times
Been thanked: 38 times
Contact:

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

Postby bangnhatquang68 » Sun 28/03/2010 11:44 am

Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

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

Postby VuVanHoanh » Tue 10/07/2012 2:42 am

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

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Tue 10/07/2012 10:42 am

VuVanHoanh wrote: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 wrote: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 wrote: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 wrote: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)

Code: Select all

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
Posts: 14
Joined: Thu 12/07/2012 1:50 pm
Has thanked: 10 times

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

Postby hoxuanhai » Wed 18/07/2012 12:23 pm

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!!!!

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Thu 26/07/2012 8:00 am

hoxuanhai wrote: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


Return to “[VB] Mẹo vặt khác”

Who is online

Users browsing this forum: No registered users and 3 guests