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.. aaa = Shell
Trang 1
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ệ
Trang 2thố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. Shell "D:\Office\Microsoft Office\Office10\WINWORD"
2. 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 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long , ByVal lpOperation As String , ByVal lpFile
2
3 As String , ByVal lpParameters As String , ByVal lpDirectory As String , ByVal
nShowCmd As Long ) As Long
4 Private Sub Form_Load()
5 ShellExecute Me hwnd, vbNullString , "C:\Mùa Thu Lá Bay.doc" , vbNullString , "C:\" , 1
6 End Sub
Nhận xét: Tên file tự do
A- 3) VBScript
Trang 3* 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. objShell.Run ( "ping 10.0.0.2" )
3. objShell.Run "WINWORD"
4. 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 Private Sub Form_Load()
2 Dim TextLine
3 Open "TESTFILE" For Input As #1' Mo file Ðê Ðoc.
4 Do While Not EOF (1)
5 Line Input #1, TextLine' Ðoc tung dòng gán vào biên TextLine
6 Debug Print TextLine' In ra màn hình
7 Loop
8 Close #1' Ðóng file.
9 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
Trang 46 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 Private Function ReadFileUni(FileName As String ) As String
2 Dim FSO
3 Set FSO = CreateObject ( "Scripting.FileSystemObject" ).OpenTextFile(FileName, 1, , -2)
4 ReadFileUni = FSO.Readall
5 Set FSO = Nothing
6 End Function
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 Private Sub Form_Load()
2 Set objWord = CreateObject ( "Word.Application" )
3 objWord.ChangeFileOpenDirectory ( "C:\" )
4 objWord.FileDialog(1).Title = "Select the files"
5
6 If objWord.FileDialog(1).Show = -1 Then
7 For Each objFile In objWord.FileDialog(1).SelectedItems
8 Set objDoc = objWord.Documents Open (objFile)
9 objDoc.Range.Copy
10 Next
11 End If
12
13 TextBox1.Paste
14 objWord.Quit
15 End Sub
Sáng 30/4/08 rảnh, chiều có thể nghỉ bù!
Trang 5Bổ sung: Đọc file txt từng dòng
Mã: Chọn tất cả
1 Private Function ReadLineText(FileName As String ) As String
2 Const ForReading = 1, ForWriting = 2, TriStateTrue = -2
3 Dim FSO: Set FSO =
CreateObject ( "Scripting.FileSystemObject" ).OpenTextFile(FileName, 1, False , -2)
4 Do Until FSO.AtEndOfStream
5 ReadLineText = ReadLineText & FSO.ReadLine & vbCrLf
6 Loop
7 Set FSO = Nothing
8 End Function
9
10 Private Sub Form_Load()
11 MsgBox ReadLineText( "C:\Mùa Thu Lá Bay.txt" )
12 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 Private Sub Command1_Click()
4 Dim WordPath$
5 MsgBox "Tìm WinWord o' Ðâu ?"
6 WordPath = CDL(3, "D:\Office\Microsoft Office\OFFICE11" )
7 If WordPath = "" Then Exit Sub
8 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.
Trang 6cộ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