Avatar billede jmarques Nybegynder
26. maj 2011 - 11:59 Der er 12 kommentarer og
1 løsning

Vil gerne kunne åbne både .doc og .docx fra tekstboks

Hej alle,

Jeg har tidligere fået stor hjælp herinde, til at kunne åbne et word dokument ved at dobbeltklikke i en bestemt tekstbok i vores database.

Dette var oprindeligt kun .doc dokumenter men nu har vi fået opdateret serveren og dokumenterne hedder nu .docx.

Er det muligt at tilføje i editoren at den skal åbne begge typer af dokumenter?

Stien i editoren ser således ud:

Const path = "P:\Security\Security rapporter\2011\", ext = ".doc"

På forhånd tak for hjælpen.

Mvh
Joachim
Avatar billede hugopedersen Nybegynder
26. maj 2011 - 16:31 #1
Smid dette i et modul og kald funktionen med det fulde stinavn på dokumentet, så åbner den i det program der er registreret i Windows til at åbne den.
Det virker således både med .doc og docx (+Excel, powerpoint o.s.v.)

Public Const Error_BADFILENAME As Long = 52
Public Const Error_INVALIDFILENAME As Long = 64
Public Const Error_DEVICEUNAVAILABLE As Long = 68
Public Const Error_DISKNOTREADY As Long = 71
Public Const Error_FILENOTFOUND As Long = 13


Public Function fhpFileOpen(strFileName As String) As String
' -----------------------------------------------------------------------------------
' Purpose    : Åbner en fil med det program der er registreret til filtypen
' Parameters :
' Returns    : String
' Created    : 11-07-06
' Modified  :
' Remarks    :
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpFileOpen
  Dim lngReturn As Long
  Dim strReturn As String
  Dim varTaskID As Variant
 
  lngReturn = apiShellExecute(hWndAccessApp, vbNullString, strFileName, vbNullString, vbNullString, WIN_NORMAL)
           
  If lngReturn > ERROR_SUCCESS Then
    strReturn = vbNullString
    lngReturn = -1
  Else
    Select Case lngReturn
      Case ERROR_NO_ASSOC:
        'Try the OpenWith dialog
        varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " & strFileName, WIN_NORMAL)
        lngReturn = (varTaskID <> 0)
      Case ERROR_OUT_OF_MEM:
        strReturn = "Fejl: For lidt hukommelse/systemresourcer. Kan ikke åbne filen!"
      Case ERROR_FILE_NOT_FOUND:
        strReturn = "Fejl: Filen findes ikke.  Kan ikke åbne filen!"
      Case ERROR_PATH_NOT_FOUND:
        strReturn = "Fejl: Stien findes ikke. Kan ikke åbne filen!"
      Case ERROR_BAD_FORMAT:
        strReturn = "Fejl: Ukendt filformat. Kan ikke åbne filen!"
      Case Else:
        strReturn = "Ukendt fejl"
    End Select
  End If
 
  If strReturn = "" Then
    strReturn = vbNullString
  Else
    strReturn = ", " & strReturn
  End If
  fhpFileOpen = lngReturn & strReturn

Exit_fhpFileOpen:
  Exit Function

Error_fhpFileOpen:
  fhpFileOpen = "Unknown error"
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpFileOpen'"
  End Select
  Resume Exit_fhpFileOpen

End Function
Avatar billede Slettet bruger
27. maj 2011 - 10:11 #2
for mig at se indeholder koden i #1 konstanter der ikke er defineret:
WIN_NORMAL og ERROR_whatever i case
Avatar billede jmarques Nybegynder
27. maj 2011 - 10:17 #3
Hej begge 2,

Jeg er heller ikke helt med på forslaget?

Desuden burde jeg nok have forklaret at mit access niveau er på begynder stadiet, så jeg kan ikke helt gennemskue hvor forslaget i givet fald skulle sættes ind i editoren?

Mvh
Joachim
Avatar billede hugopedersen Nybegynder
27. maj 2011 - 10:18 #4
UPS - forkert copy / paste

Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Avatar billede Slettet bruger
27. maj 2011 - 10:27 #5
Der er også det med WIN_NORMAL og apiShellExecute er vist kun defineret på forhånd fra access2003 og frem.
... men sammen med terry's svar her, er alle kort vist på bordet.

http://www.eksperten.dk/spm/794055
Avatar billede fdata Forsker
27. maj 2011 - 14:35 #6
Du mener vel: Hvis ikke doc dokumentet findes, så åben docx - hvis det findes.

Et eller andet sted i koden må du have en linje i stil med:
  <Åben Word> path & dokumentnavn & ext

Her må du erstatte det med noget i denne retning:
  If Dir (path & dokumentnavn & ext)<>"" Then
    <Åben Word> path & dokumentnavn & ext
  Else
    If Dir (path & dokumentnavn & ".docx")<>"" Then
      <Åben Word> path & dokumentnavn & ".docx"
    Else
      MsgBox "Dokumentet findes ikke",,"OBS"
    End If
  End If
Avatar billede jmarques Nybegynder
27. maj 2011 - 14:43 #7
Ja netop det lyder mere rigtigt. Jeg har nok ikke været præcis nok i min beskrivelse. Jeg prøver lige denne her. Tak for indsatsen til alle.
Avatar billede jmarques Nybegynder
30. maj 2011 - 12:26 #8
Hej fdata,

Jeg kan ikke rigtigt få det til at virke. Her er den fulde kode som den ser ud nu. Der dobbelt klikkes i en tekstbox der hedder "Hrnr", hvis det har noget at sige?

Private Sub Hrnr_DblClick(Cancel As Integer)
    Dim loebeNr, fileName
    Const path = "P:\Security\Security rapporter\2011\", ext = ".doc"
   
    DoCmd.RunCommand acCmdSaveRecord
    loebeNr = Val(Left(Hrnr, 3))
    fileName = path & Format(loebeNr, Left("000", 3 + (loebeNr < 100))) & "-" & Right(Hrnr, 2) & ext
       
        Shell "cmd /c start """" """ & fileName & """"
End Sub

Mvh
Joachim
Avatar billede fdata Forsker
30. maj 2011 - 21:45 #9
Så må det blive noget i retning af:

Private Sub Hrnr_DblClick(Cancel As Integer)
  Dim loebeNr, fileName
  Const path = "P:\Security\Security rapporter\2011\", ext = ".doc"
 
  DoCmd.RunCommand acCmdSaveRecord
  loebeNr = Val(Left(Hrnr, 3))
 
  fileName = path & Format(loebeNr, Left("000", 3 + (loebeNr < 100))) & "-" & Right(Hrnr, 2) & ext
  If Dir(fileName) <> "" Then
    Shell "cmd /c start """" """ & fileName & """"
  Else
    fileName = fileName & "x"
    If Dir(fileName) <> "" Then
      Shell "cmd /c start """" """ & fileName & """"
    Else
      MsgBox "Dokumentet findes ikke", , "OBS"
    End If
  End If

End Sub
Avatar billede jmarques Nybegynder
31. maj 2011 - 11:01 #10
Hej fdata,

Den er lige i skabet !!

Super, tak for hjælpen.

Sidst jeg gav point var der også flere der havde svaret. En enkelt følte sig måske lidt snydt. Er det ikke korrekt at det er dig der bør have de 60 point?

Mvh
Joachim
Avatar billede fdata Forsker
31. maj 2011 - 21:49 #11
Lækkert.

M.h.t. point er det jo op til dig at fordele dem i forhold til værdien af de svar, der er indløbet. Den lange udgave er:
Svar, som du ikke har brugt, giver du 0. Har du kun haft glæde af eet svar, giver du det 100%. Har du brugt flere af svarene i din løsning, fordeler du pointene i forhold til nytteværdien.

... og så skal du måske lige huske på, at pointene jo kun er for sjov. De fleste "stamgæster" på e er ikke specielt fokuserede på at samle point. I sidste ende gælder det jo om at hjælpe hinanden og sprede lidt viden og erfaring. Kort og godt.
Avatar billede jmarques Nybegynder
31. maj 2011 - 22:43 #12
Det lyder fornuftigt og rigtigt.

tak for hjælpen og svaret !!
Avatar billede fdata Forsker
01. juni 2011 - 13:36 #13
Velbekomme - og tak for point ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester