Đánh giá chủ đề:
  • 1 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Giúp] lấy đường dẫn tương đối cho các Shell
#1
em có 1 Module để chạy các chương trình ngoài như máy tinh, notepad...
em chỉ dẫn được đường truyền tuyệt đối thôi, muốn chuyển sang tương đối thì viết thể nào?


Mã:
Function App_MSEXCEL()
On Error GoTo App_MSEXCEL_Err

    Call Shell("D:\Program Files\Microsoft Office\Office14\EXCEL.EXE", 1)


App_MSEXCEL_Exit:
    Exit Function

App_MSEXCEL_Err:
    msgBoxOK Error$
    Resume App_MSEXCEL_Exit

End Function

Em viết thế này thì báo File not Found

Mã:
Function App_Note()
On Error GoTo App_Note_Err

    Call Shell("%windir%\system32\notepad.exe", 1)


App_Note_Exit:
    Exit Function

App_Note_Err:
    msgBoxOK Error$
    Resume App_Note_Exit

End Function
Giúp em với nha. thank thank nhìu.
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
hi dieuchinhlu,
Muốn làm được theo yêu cầu của bạn thì có 1 phương án sau:
copy đoạn code sau vào 1 module:


Option Compare Database
Option Explicit

Const errFileNotFound = 53

Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Sub RunAppWait(strCommand As String, intMode As Integer)
' Run an application, waiting for its completion
' before returning to the caller.

Const PROCESS_QUERY_INFORMATION = &H400
Const SYNCHRONIZE = &H100000

Const STILL_ACTIVE = &H103&

Dim hInstance As Long
Dim hProcess As Long
Dim lngExitCode As Long

On Error GoTo HandleError
' Start up the application.
hInstance = Shell(strCommand, intMode)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, _
True, hInstance)
Do
' Attempt to retrieve the exit code, which will
' not exist until the application has quit.
Call GetExitCodeProcess(hProcess, lngExitCode)
DoEvents
Loop Until lngExitCode <> STILL_ACTIVE

ExitHere:
Exit Sub

HandleError:
Select Case Err.Number
Case errFileNotFound
MsgBox "Unable to find '" & strCommand & "'"
Case Else
MsgBox Err.Description
End Select
Resume ExitHere
End Sub

sau đó bạn muốn mở ứng dụng nào thì chỉ cần gọi tên ưng dụng đó mà không cần quan tâm đến đường dẫn nữa, ví dụ nút bấm để mở notepad:

Private Sub Command0_Click()
RunAppWait "NOTEPAD.EXE", vbMaximizedFocus
MsgBox "Da mo NOTEPAD."
End Sub

tương tự với nút nhấn mở excel:
Private Sub Command1_Click()
RunAppWait "excel.EXE", vbMaximizedFocus
MsgBox "Da mo excel."
End Sub

chúc thành công



Chữ ký của hieuvn Xin chào! Mình là hieuvn, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn haquocquan , Noname , dieuchinhlu , Cafe Via He
#3
(18-06-11, 01:07 AM)hieuvn Đã viết: hi dieuchinhlu,
Muốn làm được theo yêu cầu của bạn thì có 1 phương án sau:
copy đoạn code sau vào 1 module:


Option Compare Database
Option Explicit

Const errFileNotFound = 53

Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Sub RunAppWait(strCommand As String, intMode As Integer)
  ' Run an application, waiting for its completion
  ' before returning to the caller.

Const PROCESS_QUERY_INFORMATION = &H400
Const SYNCHRONIZE = &H100000

Const STILL_ACTIVE = &H103&

  Dim hInstance As Long
  Dim hProcess As Long
  Dim lngExitCode As Long

  On Error GoTo HandleError
  ' Start up the application.
  hInstance = Shell(strCommand, intMode)
  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, _
     True, hInstance)
  Do
     ' Attempt to retrieve the exit code, which will
     ' not exist until the application has quit.
     Call GetExitCodeProcess(hProcess, lngExitCode)
     DoEvents
  Loop Until lngExitCode <> STILL_ACTIVE
 
ExitHere:
  Exit Sub

HandleError:
  Select Case Err.Number
     Case errFileNotFound
        MsgBox "Unable to find '" & strCommand & "'"
     Case Else
        MsgBox Err.Description
  End Select
  Resume ExitHere
End Sub

sau đó bạn muốn mở ứng dụng nào thì chỉ cần gọi tên ưng dụng đó mà không cần quan tâm đến đường dẫn nữa, ví dụ nút bấm để mở notepad:

Private Sub Command0_Click()
RunAppWait "NOTEPAD.EXE", vbMaximizedFocus
MsgBox "Da mo NOTEPAD."
End Sub

tương tự với nút nhấn mở excel:
Private Sub Command1_Click()
RunAppWait "excel.EXE", vbMaximizedFocus
MsgBox "Da mo excel."
End Sub

chúc thành công

Vậy thì nếu mình muốn mở word lên kèm theo mở một file word luôn thì code như thế nào, mong mọi người chỉ giáo
Chữ ký của phungminhluan phungminhluan,gia nhập Thủ Thuật Access từ 25-10 -15.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Lightbulb [Thủ Thuật] [Yêu cầu Hàm] Ý tưởng & Nơi yêu cầu thủ thuật maidinhdan 18 1,194 24-03-17, 09:12 PM
Bài mới nhất: maidinhdan
  Cần giúp đỡ chuyển số có thập phân ra chữ ledangvan 12 860 07-11-16, 03:56 PM
Bài mới nhất: maidinhdan
  Xin giúp đỡ về VBA Access ! vocan 12 825 11-07-16, 10:45 PM
Bài mới nhất: ongke0711
  [Hỏi] Hiện ảnh trên form ngay sau khi insert đường link hình tvn_hut 18 887 09-03-16, 11:34 AM
Bài mới nhất: maidinhdan
  [Thủ Thuật] In kết quả record sau khi tìm kiếm có điều kiện với hình ảnh khi có đường dẫn tvn_hut 5 609 18-01-16, 04:24 PM
Bài mới nhất: tranthanhan1962

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ