mrtoanbin > 25-10-18, 11:15 PM
ongke0711 > 30-10-18, 01:13 AM
Option Explicit
Private Sub cmdChonFileHyperlink_Click()
Dim fso As Object
Dim sTieuDe As String
Dim sHyperlinkFile As String
Dim sTenFile As String
Set fso = CreateObject("Scripting.FileSystemObject")
sTieuDe = "Ch" & ChrW(7885) & "n File c" & ChrW(7847) & "n t" & ChrW(7841) & "o Hyperlink:"
'Hien thi ten file + # + Dia chi (duong dan) file Hyperlink'
'(Phai co dau # truoc duong dan toi file Hyperlink)'
sTenFile = fFileDialog(msoFileDialogFilePicker, sTieuDe, "C:\", False)
sHyperlinkFile = fso.GetFileName(sTenFile) & "#" & sTenFile
Me.txtHyperLinkedFile = sHyperlinkFile
End Sub
Option Explicit
Public Enum msoFileDialogType 'Phai khai bao khi dùng Late Binding
' msoFileDialogOpen = 1
' msoFileDialogSaveAs = 2
msoFileDialogFilePicker = 3
msoFileDialogFolderPicker = 4
End Enum
'---------------------------------------------------------------------------------------
' Cung cap các tham sô:
' ~~~~~~~~~~~~~~~~~~~~
' lDialogType : 3 (hoac 4 cho Folder)
' sTitle : Tiêu de cua hop thoai FileDialog
' sInitFileName : Duong dan bat dau tim
' bMultiSelect : Nên chon False
' sFilter : Chi loc tìm các file liêt kê
'
' Ví du:
' fFileDialog(msoFileDialogOpen,,,,"MS Excel,*.xlsx;*.xls~MS Word,*.doc;*.docx")
' fFileDialog(msoFileDialogOpen, "Muon chon file nào?", "C:\tmp\",,"MS Access,*.accdb;*.mdb")
' fFileDialog(msoFileDialogOpen)
'---------------------------------------------------------------------------------------
Public Function fFileDialog(Optional ByRef lDialogType As msoFileDialogType = msoFileDialogFilePicker, _
Optional sTitle As String = "", _
Optional sInitFileName = "", _
Optional bMultiSelect As Boolean = False, _
Optional sFilter As String = "All Files,*.*") As String
On Error GoTo Error_Handler
Dim oFd As Object
Dim vItems As Variant 'Files/Folders'
Dim vFilter As Variant
Const msoFileDialogViewDetails = 2 'Enum MsoFileDialogView'
Set oFd = Application.FileDialog(lDialogType)
With oFd
'Dat ten cho tieu de hop thoai
If sTitle = "" Then
Select Case lDialogType
Case msoFileDialogOpen
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " m" & ChrW(7903) & ":"
Case msoFileDialogSaveAs
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " l" & ChrW(432) & "u:"
Case msoFileDialogFilePicker
.Title = "Ch" & ChrW(7885) & "n File:"
Case msoFileDialogFolderPicker
.Title = "Ch" & ChrW(7885) & "n Folder:"
End Select
Else
.Title = sTitle
End If
'Thiet lap duong dan Folder mac dinh'
If sInitFileName <> "" Then .InitialFileName = sInitFileName
.AllowMultiSelect = bMultiSelect
'Chon kieu View hien thi - mac dinh chon Detail'
.InitialView = msoFileDialogViewDetails
'Thiet lap chuoi loc'
If lDialogType <> msoFileDialogFolderPicker Then
Call .Filters.Clear
For Each vFilter In Split(sFilter, "~") 'Them vào tung chuoi Filter, tung dong
Call .Filters.Add(Split(vFilter, ",")(0), Split(vFilter, ",")(1))
Next vFilter
End If
If .Show = True Then
For Each vItems In .SelectedItems
fFileDialog = vItems
Next
End If
End With
Error_Handler_Exit:
On Error Resume Next
If Not oFd Is Nothing Then Set oFd = Nothing
Exit Function
Error_Handler:
MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: fFileDialog" & vbCrLf & _
"Error Description: " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
, vbOKOnly + vbCritical, "An Error has Occured!"
Resume Error_Handler_Exit
End Function
mrtoanbin > 30-10-18, 01:15 PM
(30-10-18, 01:13 AM)ongke0711 Đã viết: Tôi demo cho bạn như sau:
- Table có sẳn 1 field có kiểu dữ liệu dạng Hyperlink.
- 1 Form có 1 textbox tên "txtHyperlinkedFile": dùng chứa đường dẫn tới file cần tạo hyperlink. Textbox này có Control Source là Field hyperlink trong table.
Cách thức:
- Lấy dường dẫn đến file cần tạo hyperlink.
- Thêm dấu # trước đường dẫn để chèn hyperlink.
- Tôi dùng toàn bộ Late Binding cho 2 bộ thư viện:
+ Microsoft Office XX.X Object Library
+ Microsoft Scripting Runtime
- Code cho nút lệnh chèn hyperlink:
Mã PHP:Option Explicit
Private Sub cmdChonFileHyperlink_Click()
Dim fso As Object
Dim sTieuDe As String
Dim sHyperlinkFile As String
Dim sTenFile As String
Set fso = CreateObject("Scripting.FileSystemObject")
sTieuDe = "Ch" & ChrW(7885) & "n File c" & ChrW(7847) & "n t" & ChrW(7841) & "o Hyperlink:"
'Hien thi ten file + # + Dia chi (duong dan) file Hyperlink'
'(Phai co dau # truoc duong dan toi file Hyperlink)'
sTenFile = fFileDialog(msoFileDialogFilePicker, sTieuDe, "C:\", False)
sHyperlinkFile = fso.GetFileName(sTenFile) & "#" & sTenFile
Me.txtHyperLinkedFile = sHyperlinkFile
End Sub
Trong code trên có dùng hàm fFileDialog để lấy tên file cần link: bạn copy vào Module và đặt tên tuỳ ý. Vd: modFSBrowser
Mã PHP:Option Explicit
Public Enum msoFileDialogType 'Phai khai bao khi dùng Late Binding
' msoFileDialogOpen = 1
' msoFileDialogSaveAs = 2
msoFileDialogFilePicker = 3
msoFileDialogFolderPicker = 4
End Enum
'---------------------------------------------------------------------------------------
' Cung cap các tham sô:
' ~~~~~~~~~~~~~~~~~~~~
' lDialogType : 3 (hoac 4 cho Folder)
' sTitle : Tiêu de cua hop thoai FileDialog
' sInitFileName : Duong dan bat dau tim
' bMultiSelect : Nên chon False
' sFilter : Chi loc tìm các file liêt kê
'
' Ví du:
' fFileDialog(msoFileDialogOpen,,,,"MS Excel,*.xlsx;*.xls~MS Word,*.doc;*.docx")
' fFileDialog(msoFileDialogOpen, "Muon chon file nào?", "C:\tmp\",,"MS Access,*.accdb;*.mdb")
' fFileDialog(msoFileDialogOpen)
'---------------------------------------------------------------------------------------
Public Function fFileDialog(Optional ByRef lDialogType As msoFileDialogType = msoFileDialogFilePicker, _
Optional sTitle As String = "", _
Optional sInitFileName = "", _
Optional bMultiSelect As Boolean = False, _
Optional sFilter As String = "All Files,*.*") As String
On Error GoTo Error_Handler
Dim oFd As Object
Dim vItems As Variant 'Files/Folders'
Dim vFilter As Variant
Const msoFileDialogViewDetails = 2 'Enum MsoFileDialogView'
Set oFd = Application.FileDialog(lDialogType)
With oFd
'Dat ten cho tieu de hop thoai
If sTitle = "" Then
Select Case lDialogType
Case msoFileDialogOpen
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " m" & ChrW(7903) & ":"
Case msoFileDialogSaveAs
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " l" & ChrW(432) & "u:"
Case msoFileDialogFilePicker
.Title = "Ch" & ChrW(7885) & "n File:"
Case msoFileDialogFolderPicker
.Title = "Ch" & ChrW(7885) & "n Folder:"
End Select
Else
.Title = sTitle
End If
'Thiet lap duong dan Folder mac dinh'
If sInitFileName <> "" Then .InitialFileName = sInitFileName
.AllowMultiSelect = bMultiSelect
'Chon kieu View hien thi - mac dinh chon Detail'
.InitialView = msoFileDialogViewDetails
'Thiet lap chuoi loc'
If lDialogType <> msoFileDialogFolderPicker Then
Call .Filters.Clear
For Each vFilter In Split(sFilter, "~") 'Them vào tung chuoi Filter, tung dong
Call .Filters.Add(Split(vFilter, ",")(0), Split(vFilter, ",")(1))
Next vFilter
End If
If .Show = True Then
For Each vItems In .SelectedItems
fFileDialog = vItems
Next
End If
End With
Error_Handler_Exit:
On Error Resume Next
If Not oFd Is Nothing Then Set oFd = Nothing
Exit Function
Error_Handler:
MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: fFileDialog" & vbCrLf & _
"Error Description: " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
, vbOKOnly + vbCritical, "An Error has Occured!"
Resume Error_Handler_Exit
End Function
Link file demo: http://www.mediafire.com/file/ei71gtzg2pjra1b/Hyperlink.mdb/file
ongke0711 > 30-10-18, 02:17 PM
(30-10-18, 01:15 PM)mrtoanbin Đã viết: Cảm ơn bài viết của Bác, đã đáp ứng nhu cầu nhưng xin được hỏi them: Thay vì tên file mình tự gõ vào dòng chữ theo ý mình được không, như thế sẽ chuyên nghiệp hơn ấy bác?
mrtoanbin > 30-10-18, 08:21 PM
(30-10-18, 02:17 PM)ongke0711 Đã viết:(30-10-18, 01:15 PM)mrtoanbin Đã viết: Cảm ơn bài viết của Bác, đã đáp ứng nhu cầu nhưng xin được hỏi them: Thay vì tên file mình tự gõ vào dòng chữ theo ý mình được không, như thế sẽ chuyên nghiệp hơn ấy bác?
Trong code có đoạn này:
sHyperlinkFile = fso.GetFileName(sTenFile) & "#" & sTenFile
Bạn thay thế chỗ fso.GetFileName(sTenFile) bằng chuỗi ở textbox bạn gõ vào.
sHyperlinkFile = "Ten file go vo" & "#" & sTenFile
ongke0711 > 30-10-18, 08:41 PM
mrtoanbin > 30-10-18, 09:50 PM
(30-10-18, 08:41 PM)ongke0711 Đã viết: Tôi chỉ bạn chỗ đoạn code để đưa text rồi bạn tự ngâm cứu cách truyền tham số từ textbox đưa vô chứ có phải kêu gõ vô đó đâu.
Còn cụ thể như thế nào thì bạn đưa file demo để xem mặt mũi nó, thao tác ra sao mới có giải pháp xử lý. Nói như bạn là làm thao tác giống như Word vậy à?
Mỗi ứng dụng có cái đặc thù của nó, bạn muốn Access làm giống như word thì khó lắm nhé.
hoat > 20-12-21, 05:56 PM
ongke0711 > 20-12-21, 06:17 PM
(20-12-21, 05:56 PM)hoat Đã viết: Cho em hỏi thêm là mình muốn tạo một nút khi bấm vào nó sẽ mở 1 một folder trên máy tính tình mình làm như thế nào ạ ?
haidc > 03-03-23, 04:20 PM
(30-10-18, 01:13 AM)ongke0711 Đã viết: Tôi demo cho bạn như sau:
- Table có sẳn 1 field có kiểu dữ liệu dạng Hyperlink.
- 1 Form có 1 textbox tên "txtHyperlinkedFile": dùng chứa đường dẫn tới file cần tạo hyperlink. Textbox này có Control Source là Field hyperlink trong table.
Cách thức:
- Lấy dường dẫn đến file cần tạo hyperlink.
- Thêm dấu # trước đường dẫn để chèn hyperlink.
- Tôi dùng toàn bộ Late Binding cho 2 bộ thư viện:
+ Microsoft Office XX.X Object Library
+ Microsoft Scripting Runtime
- Code cho nút lệnh chèn hyperlink:
Mã PHP:Option Explicit
Private Sub cmdChonFileHyperlink_Click()
Dim fso As Object
Dim sTieuDe As String
Dim sHyperlinkFile As String
Dim sTenFile As String
Set fso = CreateObject("Scripting.FileSystemObject")
sTieuDe = "Ch" & ChrW(7885) & "n File c" & ChrW(7847) & "n t" & ChrW(7841) & "o Hyperlink:"
'Hien thi ten file + # + Dia chi (duong dan) file Hyperlink'
'(Phai co dau # truoc duong dan toi file Hyperlink)'
sTenFile = fFileDialog(msoFileDialogFilePicker, sTieuDe, "C:\", False)
sHyperlinkFile = fso.GetFileName(sTenFile) & "#" & sTenFile
Me.txtHyperLinkedFile = sHyperlinkFile
End Sub
Trong code trên có dùng hàm fFileDialog để lấy tên file cần link: bạn copy vào Module và đặt tên tuỳ ý. Vd: modFSBrowser
Mã PHP:Option Explicit
Public Enum msoFileDialogType 'Phai khai bao khi dùng Late Binding
' msoFileDialogOpen = 1
' msoFileDialogSaveAs = 2
msoFileDialogFilePicker = 3
msoFileDialogFolderPicker = 4
End Enum
'---------------------------------------------------------------------------------------
' Cung cap các tham sô:
' ~~~~~~~~~~~~~~~~~~~~
' lDialogType : 3 (hoac 4 cho Folder)
' sTitle : Tiêu de cua hop thoai FileDialog
' sInitFileName : Duong dan bat dau tim
' bMultiSelect : Nên chon False
' sFilter : Chi loc tìm các file liêt kê
'
' Ví du:
' fFileDialog(msoFileDialogOpen,,,,"MS Excel,*.xlsx;*.xls~MS Word,*.doc;*.docx")
' fFileDialog(msoFileDialogOpen, "Muon chon file nào?", "C:\tmp\",,"MS Access,*.accdb;*.mdb")
' fFileDialog(msoFileDialogOpen)
'---------------------------------------------------------------------------------------
Public Function fFileDialog(Optional ByRef lDialogType As msoFileDialogType = msoFileDialogFilePicker, _
Optional sTitle As String = "", _
Optional sInitFileName = "", _
Optional bMultiSelect As Boolean = False, _
Optional sFilter As String = "All Files,*.*") As String
On Error GoTo Error_Handler
Dim oFd As Object
Dim vItems As Variant 'Files/Folders'
Dim vFilter As Variant
Const msoFileDialogViewDetails = 2 'Enum MsoFileDialogView'
Set oFd = Application.FileDialog(lDialogType)
With oFd
'Dat ten cho tieu de hop thoai
If sTitle = "" Then
Select Case lDialogType
Case msoFileDialogOpen
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " m" & ChrW(7903) & ":"
Case msoFileDialogSaveAs
.Title = "Ch" & ChrW(7885) & "n File " & ChrW(273) & ChrW(7875) & " l" & ChrW(432) & "u:"
Case msoFileDialogFilePicker
.Title = "Ch" & ChrW(7885) & "n File:"
Case msoFileDialogFolderPicker
.Title = "Ch" & ChrW(7885) & "n Folder:"
End Select
Else
.Title = sTitle
End If
'Thiet lap duong dan Folder mac dinh'
If sInitFileName <> "" Then .InitialFileName = sInitFileName
.AllowMultiSelect = bMultiSelect
'Chon kieu View hien thi - mac dinh chon Detail'
.InitialView = msoFileDialogViewDetails
'Thiet lap chuoi loc'
If lDialogType <> msoFileDialogFolderPicker Then
Call .Filters.Clear
For Each vFilter In Split(sFilter, "~") 'Them vào tung chuoi Filter, tung dong
Call .Filters.Add(Split(vFilter, ",")(0), Split(vFilter, ",")(1))
Next vFilter
End If
If .Show = True Then
For Each vItems In .SelectedItems
fFileDialog = vItems
Next
End If
End With
Error_Handler_Exit:
On Error Resume Next
If Not oFd Is Nothing Then Set oFd = Nothing
Exit Function
Error_Handler:
MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: fFileDialog" & vbCrLf & _
"Error Description: " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
, vbOKOnly + vbCritical, "An Error has Occured!"
Resume Error_Handler_Exit
End Function
Link file demo: http://www.mediafire.com/file/ei71gtzg2pjra1b/Hyperlink.mdb/file