2014-02-09 13 views
1

我想在Access2010中編程一個按鈕,該按鈕允許用戶打開一個與在表單上的文本框中輸入相同名稱的pdf文件。這個想法是,測試人員將在測試編號字段中輸入測試編號,這是一個文本框,然後最終用戶可以點擊一個按鈕來打開該pdf文件。我試圖命名一個未綁定的文本框,然後將其設置爲字符串變量,但是當我進入代碼時,我無法讀取任何內容。 pdf文件位於T:\ Lab \ PHOTO1 \中,然後有子文件夾編號爲32 33 34..etc。當數字開始到下一組,如35000,然後一個新的文件夾,35編程一個按鈕來打開位於子文件夾中的PDF

Public Sub PDF1() 
Dim fso As New FileSystemObject 
Dim strTestno As String 
Dim strPath As String 
Dim fldbaseFolder As Folder 
Dim fldSubFolder As Folder 
Dim frmForm1 As Form 
'Set frmForm1 = [Form_Test Request Form] 
'set strTestno to value in text box 
strTestno = [Form_Test Request Form].Test_Number_Combo1 

'set your path 
    strPath = "C:\Users\usb14322\Desktop\TEMP\" 
    DirFile = strPath & strTestno & ".pdf" 
'Get a referemce to the Folder object 
    Set fldbaseFolder = fso.GetFolder(strPath) 

'Iterate through subfolders. 
For Each fldSubFolder In fldbaseFolder.SubFolders 
      If strTestno = "" Then 
      MsgBox "File does not exist" 
      Else 
      Application.FollowHyperlink "fldSubFolder" & "strTestno" & ".pdf" 
      'Len(Dir(DirFile & strTestno).open 
      'Debug.Print strTestno 
      End If 
Next 




End Sub 

回答

0

我創建你的環境(綁定文本框,設置爲路徑等)的名稱創建和打開PDF文件沒有問題。因爲我不知道你的代碼是什麼樣的,所以如果你可以將代碼和結果發佈到你遇到的那一行,這將會很有幫助。

實際上,我開發的代碼是'版本無關',只要您安裝了相關程序,就會打開任何類型的文件。即如果'Office11或Office14等沒有需要更改代碼

+0

我編輯了我的問題,以便它將顯示上面的代碼在我的問題下。我遇到的第一個問題之一是當我進入代碼時,我無法讓我的字符串變量讀取組合框中的內容,或者即使將其設置爲文本框。 – ktacks

+0

我假設你的意思是'strTextno = TestNumberCombo1'這一行沒有任何迴應?在'TestNumberCombo1'之前添加一個debug.print,看看有什麼價值。我剛剛用ComboBox進行了測試,並且綁定和未綁定的文本框都得到了值。另外,正如HansUp所建議的那樣,我會轉換到FSO –

+0

感謝您的幫助。我的組合框使用了錯誤的名稱。我更新了我的代碼,並且可以通過子文件夾查看代碼。我現在的問題是,如果找到文件,那麼我需要打開文件。我沒有看到如何做到這一點。如果有任何建議,我將不勝感激。 – ktacks

0

@ktacks由於文本限制,我不得不添加此「答案」...將下面顯示的代碼粘貼到一個新模塊中,然後調用它:

strExt = Right(strFileName, 3)      ' Get file extension 
fvstr_Application = GetAssociatedProgram(strExt) ' Find Program 

strDocPath = "<Your file folder\" & strFileName 
strLaunch = fvstr_Application & " " & Chr(34) & strDocPath & Chr(34) 
DoEvents 

lvstr_AppID = Shell(strLaunch, 1)  ' Run specified Application 
DoEvents 




<NEW MODULE> 
Option Compare Database 
Option Explicit 

Global gv_Version As String 


Declare Function FindExecutable Lib _ 
    "shell32.dll" Alias "FindExecutableA" _ 
    (ByVal lpFile As String, ByVal lpDirectory _ 
    As String, ByVal lpResult As String) As Long 
Declare Function GetTempFileName Lib _ 
    "kernel32" Alias "GetTempFileNameA" (ByVal _ 
     lpszPath As String, ByVal lpPrefixString _ 
     As String, ByVal wUnique As Long, ByVal _ 
     lpTempFileName As String) As Long 

Declare Function GetTempPath Lib _ 
    "kernel32" Alias "GetTempPathA" (ByVal _ 
    nBufferLength As Long, ByVal lpBuffer As _ 
    String) As Long 


Public Function GetAssociatedProgram(ByVal _ 
    Extension As String) As String 

' This function will return the path to the program that is registered to handle 
' certain types of files. In our case, we pass 'mdb' as the extension and expect 
' to get where 'C:\Program Files\Microsoft....\msaccess.exe' is located. 

Dim Path As String 
Dim FileName As String 
Dim nRet As Long 
Const MAX_PATH As Long = 260 

'Create a temporary file 
Path = String$(MAX_PATH, 0) 

If GetTempPath(MAX_PATH, Path) Then 
    FileName = String$(MAX_PATH, 0) 

    If GetTempFileName(Path, "~", 0, FileName) Then 
     FileName = Left$(FileName, _ 
      InStr(FileName, vbNullChar) - 1) 

     'Rename it to use supplied extension 
     Name FileName As Left$(FileName, _ 
      InStr(FileName, ".")) & Extension 
      FileName = Left$(FileName, _ 
      InStr(FileName, ".")) & Extension 

     Path = String$(MAX_PATH, 0)  'Get name of associated EXE 

     Call FindExecutable(FileName, _ 
      vbNullString, Path) 
     GetAssociatedProgram = Left$(_ 
      Path, InStr(Path, vbNullChar) - 1) 
     Kill FileName     'Delete the temporary file 
    End If 
End If 

End Function 
+0

再次感謝您幫助我並將代碼粘貼到此處。 – ktacks

相關問題