Tải bản đầy đủ (.doc) (6 trang)

Tổng quát về các lệnh mở file Visual2013

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (62.48 KB, 6 trang )





Tổng Quát về Các Lệnh Mở File
gửi bởi truongphu » Thứ 4 30/04/2008 10:10 am
Thủ thuật: Tổng Quát về Các Lệnh Mở File
Tác giả: truongphu
Mô tả: Tổng Quát về Các Lệnh Mở File. Mong được các bạn giúp đở thêm bài viết vì
chữ Tổng Quát "to' quá
A- Lệnh gọi thi hành
A- 1) Lệnh Shell: tham khảo VBLib
* Gọi trình WinWord, Phải có path của WINWORD.EXE. Theo thói quen, có thể bỏ phần
".exe" Ví dụ:
Mã: Chọn tất cả
1.

aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD", 1)

* Gọi trình WinWord và mở file doc nào đó:
Mã: Chọn tất cả
1.

aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD C:\MùaThu~1.doc", 1)

Lưu ý: tên file không được có space, ví dụ sau sẽ không chạy được:
Mã: Chọn tất cả
1.

NotRun = Shell("D:\Office\Microsoft Office\Office10\WINWORD.EXE" "C:\Mùa Thu
Lá bay", 1)



* Ta có thể dùng trình văn bản để mở một file bất kỳ, đọc thấy toàn mã máy:
Mã: Chọn tất cả
1.

aaa = Shell("C:\Program Files\Windows NT\Accessories\wordpad
c:\windows\system32\calc.exe", 1)

* Khi Shell gọi một trình của MS Windows (ví dụ calc.exe) trong các thư mục gốc hay hệ
thống (windows\ hay windows\system32), do khi khởi động, biến môi trường đã nộp vào
bộ nhớ nên ta có thể bỏ qua đường dẫn, bất kể trên máy nào đó có cài winXP ở đâu!


Mã: Chọn tất cả
1.

aaa = Shell ("calc")

hoặc gọn hơn nữa
Mã: Chọn tất cả
1.

Shell "calc"

nguyên tắc gọn nầy cũng dùng với các trình khác:
Mã: Chọn tất cả
1.
2.

Shell "D:\Office\Microsoft Office\Office10\WINWORD"

Shell "D:\Office\Microsoft Office\Office10\WINWORD C:\MùaThu~1.doc"

A- 2) Lệnh ShellExecute:
ShellExecute là tự chạy một yêu cầu, có thể là một file, hay một câu lệnh, VỚI ĐIỀU
KIỆN LÀ FILE ĐÓ, HAY CÂU LỆNH ĐÓ ĐÃ ĐƯỢC KHAI BÁO TRONG
WINDOWS LÀ MỞ VỚI TRÌNH NÀO
Vậy thì một file hay một câu lệnh chưa đăng ký "Open With" thì ShellExecute cũng vô
tác dụng!
Vì lý do trên, ta nên cân nhắc khi gọi ShellExecute, ví dụ muốn xem nội dung một file
không có đuôi mở rộng, ta chỉ cần gọi Shell để chạy Notepad hay Wordpad load file cần
xem, tránh khai báo rườm rà không cần thiết.
Khai báo hàm API:
Mã: Chọn tất cả
1.
2.
3.
4.
5.
6.

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal
hwnd As Long, ByVal lpOperation As String, ByVal lpFile
As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) As Long
Private Sub Form_Load()
ShellExecute Me.hwnd, vbNullString, "C:\Mùa Thu Lá Bay.doc", vbNullString, "C:\", 1
End Sub

Nhận xét: Tên file tự do
A- 3) VBScript

* Gọi một ứng dụng
Các dòng lệnh sau tương đương với các dòng lệnh của Shell:
Set objShell = CreateObject("Wscript.Shell")
Mã: Chọn tất cả
1.

objShell.Run "calc"


2.
3.
4.

objShell.Run ("ping 10.0.0.2")
objShell.Run "WINWORD"
objShell.Run "EXCEL"

Nhận xét: Tốn một câu khai báo: "Set objShell =...", nhưng khi chạy các ứng dụng đã
đăng ký, ví dụ WinWord thì khỏi khai path, khác với Shell
* Mở một file văn bản
Mã: Chọn tất cả
1.

Set objword = CreateObject("Word.Application").Documents.Open("C:\Mùa Thu Lá
Bay.Doc", 1)

B- Lệnh mở và thao tác trên file với thao tác cơ bản là Đọc, Ghi. Trong bài viết nầy chỉ
minh họa thao tác Đọc
B- 1) Lệnh Open: tham khảo VBLib
a- Chuyên mở file TXT

trích VBLib:
Mã: Chọn tất cả
1.
2.
3.
4.
5.
6.
7.
8.
9.

Private Sub Form_Load()
Dim TextLine
Open "TESTFILE" For Input As #1' Mo file Ðê Ðoc.
Do While Not EOF(1)
Line Input #1, TextLine' Ðoc tung dòng gán vào biên TextLine
Debug.Print TextLine' In ra màn hình
Loop
Close #1' Ðóng file.
End Sub

b- Đọc text Unicode
trích VBLib: (trong VBLib phần nầy còn sót vài thành phần. Code sau đây hoàn chỉnh
hơn)
Mã: Chọn tất cả
1. Private Sub Form_Load()
2. Dim fNum As Long, B() As Byte, fp
3.
fp = "C:\Mùa Thu Lá Bay.txt"

4.
fNum = FreeFile()
5.
Open fp For Binary Access Read As #fNum
6.
ReDim B(LOF(fNum))
7.
Get #fNum, , B
8.
Close #fNum
9.
10.
Dim arr, i As Integer, s As String
11.
arr = Split(B, vbCrLf)
12.
For i = 0 To UBound(arr)
13.
s = s & arr(i) & vbCrLf
14.
Next i


15. TextBox1 = s
16. End Sub

B- 2) VBScript cho TXT: Tham khảo thêm Mục Tip VB
Đọc bất kể mã unicode! quá gọn
Mã: Chọn tất cả
1.

2.
3.

Private Function ReadFileUni(FileName As String) As String
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, ,
-2)
ReadFileUni = FSO.Readall
Set FSO = Nothing
End Function

4.
5.
6.
7.
8. Private Sub Form_Load()
9. TextBox1 = ReadFileUni("C:\Mùa Thu Lá Bay.txt")
10. End Sub

B- 3) VBScript cho Doc (hoặc dưới nó như RTF, TXT): Tham khảo thêm Mục Tip VB
Mã: Chọn tất cả
1.
2.
3.
4.
5.
6.
7.
8.
9.

10.
11.
12.
13.
14.
15.

Private Sub Form_Load()
Set objWord = CreateObject("Word.Application")
objWord.ChangeFileOpenDirectory ("C:\")
objWord.FileDialog(1).Title = "Select the files"
If objWord.FileDialog(1).Show = -1 Then
For Each objFile In objWord.FileDialog(1).SelectedItems
Set objDoc = objWord.Documents.Open(objFile)
objDoc.Range.Copy
Next
End If
TextBox1.Paste
objWord.Quit
End Sub

Sáng 30/4/08 rảnh, chiều có thể nghỉ bù!
Bổ sung: Đọc file txt từng dòng
Mã: Chọn tất cả
1.
2.
3.
4.
5.


Private Function ReadLineText(FileName As String) As String
Const ForReading = 1, ForWriting = 2, TriStateTrue = -2
Dim FSO: Set FSO =
CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, False, -2)
Do Until FSO.AtEndOfStream
ReadLineText = ReadLineText & FSO.ReadLine & vbCrLf


6.
7.
8.
9.
10.
11.
12.

Loop
Set FSO = Nothing
End Function
Private Sub Form_Load()
MsgBox ReadLineText("C:\Mùa Thu Lá Bay.txt")
End Sub

lệnh FSO.Readall sẽ thành lệnh FSO.ReadLine
Thêm Do Until FSO.AtEndOfStream
...
Loop để duyệt từng dòng
Các code khác như cũ. Tôi đã bổ sung ở trên, phần cuối bài
Dùng lệnh Shell gọi Word ra để mở một file doc nguyên tắc là OK
Tuy nhiên khi thực hành bằng code, rất nhiều bạn thất bại, lý do:

1- Khai báo code chưa đúng
2- Đường dẫn WinWord dài bao nhiêu cũng được, nhưng đường dẫn file doc TUYỆT
ĐỐI PHẢI 8.3
3- chưa hổ trợ tên file (hay đường dẫn) có tiếng Việt
Để đơn giản hóa vấn đề, tôi viết một Project: Dùng CommonDialog (khai bằng code) gọi
lần lượt WinWord và File Doc, giao cho SHELL xử lý
Mã: Chọn tất cả
1.

Private Declare Function GetShortPathName Lib "kernel32" Alias
"GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String,
ByVal lBuffer As Long) As Long

2.
3.
4.
5.
6.
7.
8.

Private Sub Command1_Click()
Dim WordPath$
MsgBox "Tìm WinWord o' Ðâu ?"
WordPath = CDL(3, "D:\Office\Microsoft Office\OFFICE11")
If WordPath = "" Then Exit Sub
MsgBox "Tìm thâ'y Word.EXE o':" & vbCrLf & WordPath & vbCrLf & "Mo' File Word
o' Ðâu ?" & vbCrLf & "(KHÔNG HÔ TRO' FILENAME TIÊ'NG VIÊT)"
9. Shell WordPath & " " & ShortPath(CDL(, "D:\MY DOCUMENTS")), vbNormalFocus
10. End Sub

11.
12.
13.
14.

cộng tổng các column theo điều kiện giá trị
gửi bởi tdc » Thứ 4 18/12/2013 3:07 pm


em có file dữ liệu access được tạo column như sau "ngay - N01 - N02 - N03 - ...... N31".
trong đó các columns từ N01 cho đến N31 là dạng number. để cộng tổng em đã dùng câu
truy vấn như sau
Mã: Chọn tất cả
If rs.State = 1 Then: rs.Close
rs.Open "SELECT
N01+N02+N03+N04+N05+N06+N07+N08+N09+N10+N11+N12+N13+N14+N15+N16+N17+N
18+N19+N20+N21+N22+N23+N24+N25+N26+N27+N28+N29+N30+N31 AS tongcong FROM
bang_cong WHERE thang='" _
& thangnam & "' and ho_ten='" & List1.List(i) & "'", DB, adOpenKeyset,
adLockPessimistic



×