• 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
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 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ả



Mã: Chọn hết

  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.  
Tập tin đính kèm
EbExecuteLine.rar
(1.5 KiB) Đã tải 801 lần
Sửa lần cuối bởi truongphu vào ngày T.Ba 13/01/2009 4:27 pm với 1 lần sửa.


o0o--truongphu--o0o

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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 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:

Mã: Chọn hết

  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ả

Mã: Chọn hết

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

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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Năm 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

Mã: Chọn hết

  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

Mã: Chọn hết

  1. Shell "calc.exe",vbNormalFocus


- Đổi màu Form1

Mã: Chọn hết

  1. Form1.BackColor = vbRed


C- Khối lệnh ở text1

Mã: Chọn hết

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

Mã: Chọn hết

  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:

Mã: Chọn hết

  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

Mã: Chọn hết

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


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

Mã: Chọn hết

  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:

Mã: Chọn hết

  1. 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 người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Năm 15/01/2009 9:39 pm

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

* ScriptControl1.Eval xem bài 2

Mã: Chọn hết

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


* ScriptControl1.ExecuteStatement

Mã: Chọn hết

  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

Mã: Chọn hết

  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

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 948
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » CN 18/01/2009 10:51 am

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 548 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: T.Ba 29/07/2008 8:32 am
Đến từ: Sóc Trăng
Has thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi luckyst » T.Sáu 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 !

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

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

Gửi bàigửi bởi bangnhatquang68 » CN 28/03/2010 11:44 am

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 người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

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

Gửi bàigửi bởi VuVanHoanh » T.Ba 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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 10/07/2012 10:42 am

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 hết

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: T.Năm 12/07/2012 1:50 pm
Has thanked: 10 time

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

Gửi bàigửi bởi hoxuanhai » T.Tư 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!!!!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Năm 26/07/2012 8:00 am

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


Quay về “[VB] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách