Avatar billede h_s Forsker
28. oktober 2006 - 17:14 Der er 16 kommentarer og
1 løsning

Makro - find doc-dokument med samme navn

Jeg mangler en makrostump, der tjekker om der er en doc-fil, der har samme navn som xls-fil og derefter åbner den.

Hvis den findes, så ligger den her:

C:\test\referat\
Avatar billede kabbak Professor
28. oktober 2006 - 19:05 #1
A = Dir("C:\test\referat\" & Split(ThisWorkbook.Name, ".")(0) & ".doc")
If A <>"" then

' den er der

else

' den er der ikke

end if
Avatar billede h_s Forsker
29. oktober 2006 - 10:10 #2
super kabbak, men hvordan får jeg åbnet dokumentet?
Avatar billede kabbak Professor
29. oktober 2006 - 10:26 #3
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long



Public Sub Tjek_For_referat()
If Dir("C:\test\referat\" & Split(ThisWorkbook.Name, ".")(0) & ".doc") <> "" Then
result = ShellExecute(0, "open", "C:\test\referat\" & Split(ThisWorkbook.Name, ".")(0) & ".doc", "", "", vbNormalFocus)
Else
MsgBox "Intet dokument"

End If
End Sub
Avatar billede h_s Forsker
29. oktober 2006 - 13:30 #4
kabbak>jeg synes ikke rigtig jeg kan få det til at virke.
Hvad betyder de 4 første linjer?
Hvor skal de stå i min makro?
Avatar billede kabbak Professor
29. oktober 2006 - 14:32 #5
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

de skal stå øverst i et modul, så vil excel læse dem, de skal ikke ind i koden.
Avatar billede h_s Forsker
29. oktober 2006 - 14:42 #6
Kan ikke få det til at virke

følgende fejl opstår: Only comments may appear after End sub, End function or End property.

Det er en fejl i forbindelse med

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Avatar billede kabbak Professor
29. oktober 2006 - 14:55 #7
har du sat den i et module, det må ikke være i et ark, eller ThisworkBook moduler
Avatar billede h_s Forsker
29. oktober 2006 - 16:44 #8
Ja, den ligger i Mudule3!

Det første af min makro ser således ud:

Public Sub cmdÅbenReferat()
'Åben Word-doc Referat

'Kontrol af om der er skrevet navn i C3 og dato i H3
Set x = Worksheets("Info").Range("C3")
Set y = Worksheets("Info").Range("H3")
'---------------------Dette er deklartioner af konstante variabler------------------------------------------------
Const Bogmærke As String = "Navn"
Const DotDocPathG As String = "C:\Kunobeller\Referater\" 'Dette er mappen hvor den gemmer wordfilen
Const DotDocPathH As String = "C:\Kunobeller\Skabeloner\" 'Dette er mappen hvor den finder skabelonen
Const DotName As String = "kunobeller.dot" 'Dette er navnet på skabelonen
Const CellStr As String = "C3" 'Dette er feltet hvor den finder navnet på eleven
'-----------------------------------------------------------------------------------------------------------------
 
  If x = "" Then
     
      'Hvis "C3" er " ", så kommer der en meddelse om at man skal skrive barnets navn
      Blank = MsgBox(Prompt:="Husk at skrive barnets navn!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("C3").Select
    Else
  If y = "" Then
      'Hvis "H3" er " ", så kommer der en meddelse om at man skal skrive dato
      Blank = MsgBox(Prompt:="Husk at skrive undersøgelsesdato!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("H3").Select
  Else

HER SKAL DIT STÅ

  Else

Kan du fortælle mig hvad jeg gør forkert?
Avatar billede kabbak Professor
29. oktober 2006 - 18:10 #9
Public Sub cmdÅbenReferat()
'Åben Word-doc Referat

'Kontrol af om der er skrevet navn i C3 og dato i H3
Set x = Worksheets("Info").Range("C3")
Set y = Worksheets("Info").Range("H3")
'---------------------Dette er deklartioner af konstante variabler------------------------------------------------
Const Bogmærke As String = "Navn"
Const DotDocPathG As String = "C:\Kunobeller\Referater\" 'Dette er mappen hvor den gemmer wordfilen
Const DotDocPathH As String = "C:\Kunobeller\Skabeloner\" 'Dette er mappen hvor den finder skabelonen
Const DotName As String = "kunobeller.dot" 'Dette er navnet på skabelonen
Const CellStr As String = "C3" 'Dette er feltet hvor den finder navnet på eleven
'-----------------------------------------------------------------------------------------------------------------
 
  If x = "" Then
     
      'Hvis "C3" er " ", så kommer der en meddelse om at man skal skrive barnets navn
      Blank = MsgBox(Prompt:="Husk at skrive barnets navn!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("C3").Select
    Else
  If y = "" Then
      'Hvis "H3" er " ", så kommer der en meddelse om at man skal skrive dato
      Blank = MsgBox(Prompt:="Husk at skrive undersøgelsesdato!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("H3").Select
  Else

If Dir("C:\Kunobeller\Referater\" & Split(ThisWorkbook.Name, ".")(0) & ".doc") <> "" Then
result = ShellExecute(0, "open", "C:\Kunobeller\Referater\" & Split(ThisWorkbook.Name, ".")(0) & ".doc", "", "", vbNormalFocus)
Else
MsgBox "Intet dokument"

End If


  Else





det du har i  Module3. står det med rød skrift ??
Avatar billede h_s Forsker
29. oktober 2006 - 21:13 #10
Nej det er ikke rødt.
Nu får jeg fejl i ShellExecute. Der står at den ikke er defineret!
Avatar billede kabbak Professor
29. oktober 2006 - 21:49 #11
står dette helt alene i toppen af module3

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long


det skal det, det er det der definere  ShellExecute
Avatar billede h_s Forsker
30. oktober 2006 - 20:47 #12
så får jeg ingen fejl på det, men jeg synes ikke det virker efter hensigten. makroen åbner ikke doc-filen med samme navn som xls-filen. Den åbner en ny doc-fil ud fra dot-filen. Der er difineret senere i makroen!
Avatar billede kabbak Professor
30. oktober 2006 - 20:53 #13
må jeg se hele din makro
Avatar billede h_s Forsker
30. oktober 2006 - 21:47 #14
Nu må du ikke grine - Jeg er jo ikke så god til det med makroer :-)
Hvis du kan optimere den lidt, så den er hurtigere må du meget gerne kigge på det også.. :-)

-----------------
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Public Sub cmdÅbenReferat()
'Åben Word-doc Referat

'---------------------Dette er deklartioner af konstante variabler------------------------------------------------
'Kontrol af om der er skrevet navn i C3 og dato i H3
Set x = Worksheets("Info").Range("C3")
Set y = Worksheets("Info").Range("H3")
Const Bogmærke As String = "Navn"
Const Kunobeller As String = "C:\Kunobeller\" 'Mappe hvor programmet ligger i
Const Referater As String = "C:\Kunobeller\Referater\" 'Dette er mappen hvor den gemmer wordfilen
Const Skabeloner As String = "C:\Kunobeller\Skabeloner\" 'Dette er mappen hvor den finder skabelonen
Const DotName As String = "kunobeller.dot" 'Dette er navnet på skabelonen
Const CellStr As String = "C3" 'Dette er feltet hvor den finder navnet på eleven
'-----------------------------------------------------------------------------------------------------------------
 
  If x = "" Then
     
      'Hvis "C3" er " ", så kommer der en meddelse om at man skal skrive barnets navn
      Blank = MsgBox(Prompt:="Husk at skrive barnets navn!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("C3").Select
    Else
  If y = "" Then
      'Hvis "H3" er " ", så kommer der en meddelse om at man skal skrive dato
      Blank = MsgBox(Prompt:="Husk at skrive undersøgelsesdato!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("H3").Select
  Else
     
      'Vises "Er du sikker"
      OK = MsgBox(Prompt:="Er du sikker?", _
        Title:="Gem", Buttons:=vbQuestion + vbYesNo)
        If OK = vbNo Then
       
        Else
        'Kontrol af at de nødvendige mapper findes
        A = Dir(Kunobeller, vbDirectory)
            If A = "" Then
            MkDir (Kunobeller)
            End If
        B = Dir(Referater, vbDirectory)
            If B = "" Then
            MkDir (Referater)
            End If
       
'Ser efter om der findes et Word-dokument med samme navn som Excel-dokumentet
'Hvis der gør så åbnes det i stedet for at gemme
If Dir("C:\Kunobeller\Referater\" & Split(ThisWorkbook.Name, ".")(0) & ".doc") <> "" Then
result = ShellExecute(0, "open", "C:\Kunobeller\Referater\" & Split(ThisWorkbook.Name, ".")(0) & ".doc", "", "", vbNormalFocus)

'Else

'----------------Her går den igang med at fortælle at den skal bruge word til at udfører de næste ting------------
 
  'Dim MyWordApp As Word.Application
  Set MyWordApp = CreateObject("Word.Application")
  With MyWordApp
      .Visible = True 'True når du vil følge med
      .Documents.Add Skabeloner & DotName 'Rettet.
     
'-----------------Her kommer så der hvor den laver bogmærket ud fra variablerne----------------------------------
'--------------------------Slut med den nemmeudgave nu laver vi rigtig programering :-)---------------------------

'---------------------------------Vi opretter lige lidt variabler-------------------
Dim celler, arrceller, bogmark, arrbog

celler = "b2,h2,c3,h3,c4,h4,c5,e5,h5,h7,h5,h6,h7,h8,h2,c3,c5,c4,h4,c3,c6,h4,h5"
arrceller = Split(celler, ",")
bogmark = "Trin,Institution,Navn,Undersøgtdato,Fødselsdato,Barnetspædagog,AlderIMdr,Køn,UdspurgtAf,UdspurgtAf2,BarnetspædagogUnderskrift,BarnetspædagogUnderskriftTitel,Hjælper,HjælperTitel,VInstitution,VNavn,VAlderIMdr,VFødselsdato,VPædagog,PNavn,PStøtteperiode,PPædagog,POpfølgningAf"
arrbog = Split(bogmark, ",")

For t = LBound(arrceller) To UBound(arrceller)
 
    If .ActiveDocument.Bookmarks.Exists(arrbog(t)) Then      'her undersøger den om bogmærket findes (Fødselsdato)
        .ActiveDocument.Bookmarks(arrbog(t)).Select          'her vælger den bogmærket (Fødselsdato)
        .Selection.Text = Worksheets("Info").Range(arrceller(t)).Text    'her henter den variablen fra cellen(C4)
        .Selection.Bookmarks.Add arrbog(t)                    'her indsætter den variablen i bogmærket fødselsdato
    End If
Next

'her opretter jeg navnet på filen som der skal gemmes. Du kan selv lege lidt med den----
        gemmenavn = Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x 'Worksheets("Info").Range(CellStr).Text

'- Så fortæller vi at den skal gemme i mappen DOTDOCPATH som er en konstant med stien til mappen oppe fra konstantvariabler
'- variabel som vi lige har lavet, altså gemmenavn
  MyWordApp.ActiveDocument.SaveAs Referater & gemmenavn, , , , False 'Rettet, erstat selv med navn osv.
 
 
'Viser Messegebox
    Gemt = MsgBox(Prompt:=Referater & Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x.Text, Title:="Filen er gemt", Buttons:=vbOKOnly)
    If .ActiveDocument.Bookmarks.Exists("Start") Then      'her undersøger den om bogmærket findes (Fødselsdato)
        .ActiveDocument.Bookmarks("Start").Select
    End If
   
End With
       
'-----------------MAN KAN FÅ DEN TIL AT LADE WORD STÅ ABENT HVIS MAN SLETTER NEDENSTÅENDE-------
'MyWordApp.Quit

'----------------OG RYDER LIDT OP MED AT LUKKE VARIABLEN MYWORDAPP
  Set MyWordApp = Nothing
End If
End If
End If
'End If
End Sub
Avatar billede kabbak Professor
30. oktober 2006 - 22:07 #15
Den er da meget fin.

Jeg tror at du har koden i en anden mappe, så i stedet for ThisWorkbook har jeg rettet til ActiveWorkbook.




Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Public Sub cmdÅbenReferat()
'Åben Word-doc Referat

'---------------------Dette er deklartioner af konstante variabler------------------------------------------------
'Kontrol af om der er skrevet navn i C3 og dato i H3
    Set x = Worksheets("Info").Range("C3")
    Set y = Worksheets("Info").Range("H3")
    Const Bogmærke As String = "Navn"
    Const Kunobeller As String = "C:\Kunobeller\"    'Mappe hvor programmet ligger i
    Const Referater As String = "C:\Kunobeller\Referater\"    'Dette er mappen hvor den gemmer wordfilen
    Const Skabeloner As String = "C:\Kunobeller\Skabeloner\"    'Dette er mappen hvor den finder skabelonen
    Const DotName As String = "kunobeller.dot"    'Dette er navnet på skabelonen
    Const CellStr As String = "C3"    'Dette er feltet hvor den finder navnet på eleven
    '-----------------------------------------------------------------------------------------------------------------

    If x = "" Then

        'Hvis "C3" er " ", så kommer der en meddelse om at man skal skrive barnets navn
        Blank = MsgBox(Prompt:="Husk at skrive barnets navn!", Title:="Meddelelse", Buttons:=vbInformation)
        Worksheets("Info").Select
        Range("C3").Select
    Else
        If y = "" Then
            'Hvis "H3" er " ", så kommer der en meddelse om at man skal skrive dato
            Blank = MsgBox(Prompt:="Husk at skrive undersøgelsesdato!", Title:="Meddelelse", Buttons:=vbInformation)
            Worksheets("Info").Select
            Range("H3").Select
        Else

            'Vises "Er du sikker"
            OK = MsgBox(Prompt:="Er du sikker?", _
                        Title:="Gem", Buttons:=vbQuestion + vbYesNo)
            If OK = vbNo Then

            Else
                'Kontrol af at de nødvendige mapper findes
              If Dir(Kunobeller, vbDirectory) = "" Then MkDir (Kunobeller)
              If Dir(Referater, vbDirectory) = "" Then MkDir (Referater)

                'Ser efter om der findes et Word-dokument med samme navn som Excel-dokumentet
                'Hvis der gør så åbnes det i stedet for at gemme
                If Dir(Referater & Split(ActiveWorkbook.Name, ".")(0) & ".doc") <> "" Then
                    result = ShellExecute(0, "open", Referater & Split(ActiveWorkbook.Name, ".")(0) & ".doc", "", "", vbNormalFocus)

                Else

                    '----------------Her går den igang med at fortælle at den skal bruge word til at udfører de næste ting------------

                    'Dim MyWordApp As Word.Application
                    Set MyWordApp = CreateObject("Word.Application")
                    With MyWordApp
                        .Visible = True    'True når du vil følge med
                        .Documents.Add Skabeloner & DotName    'Rettet.

                        '-----------------Her kommer så der hvor den laver bogmærket ud fra variablerne----------------------------------
                        '--------------------------Slut med den nemmeudgave nu laver vi rigtig programering :-)---------------------------

                        '---------------------------------Vi opretter lige lidt variabler-------------------
                        Dim celler, arrceller, bogmark, arrbog

                        celler = "b2,h2,c3,h3,c4,h4,c5,e5,h5,h7,h5,h6,h7,h8,h2,c3,c5,c4,h4,c3,c6,h4,h5"
                        arrceller = Split(celler, ",")
                        bogmark = "Trin,Institution,Navn,Undersøgtdato,Fødselsdato,Barnetspædagog,AlderIMdr,Køn,UdspurgtAf,UdspurgtAf2,BarnetspædagogUnderskrift,BarnetspædagogUnderskriftTitel,Hjælper,HjælperTitel,VInstitution,VNavn,VAlderIMdr,VFødselsdato,VPædagog,PNavn,PStøtteperiode,PPædagog,POpfølgningAf"
                        arrbog = Split(bogmark, ",")

                        For t = LBound(arrceller) To UBound(arrceller)

                            If .ActiveDocument.Bookmarks.Exists(arrbog(t)) Then      'her undersøger den om bogmærket findes (Fødselsdato)
                                .ActiveDocument.Bookmarks(arrbog(t)).Select          'her vælger den bogmærket (Fødselsdato)
                                .Selection.Text = Worksheets("Info").Range(arrceller(t)).Text    'her henter den variablen fra cellen(C4)
                                .Selection.Bookmarks.Add arrbog(t)                    'her indsætter den variablen i bogmærket fødselsdato
                            End If
                        Next

                        'her opretter jeg navnet på filen som der skal gemmes. Du kan selv lege lidt med den----
                        gemmenavn = Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x    'Worksheets("Info").Range(CellStr).Text

                        '- Så fortæller vi at den skal gemme i mappen DOTDOCPATH som er en konstant med stien til mappen oppe fra konstantvariabler
                        '- variabel som vi lige har lavet, altså gemmenavn
                        MyWordApp.ActiveDocument.SaveAs Referater & gemmenavn, , , , False    'Rettet, erstat selv med navn osv.


                        'Viser Messegebox
                        Gemt = MsgBox(Prompt:=Referater & Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x.Text, Title:="Filen er gemt", Buttons:=vbOKOnly)
                        If .ActiveDocument.Bookmarks.Exists("Start") Then      'her undersøger den om bogmærket findes (Fødselsdato)
                            .ActiveDocument.Bookmarks("Start").Select
                        End If

                    End With

                    '-----------------MAN KAN FÅ DEN TIL AT LADE WORD STÅ ABENT HVIS MAN SLETTER NEDENSTÅENDE-------
                    'MyWordApp.Quit

                    '----------------OG RYDER LIDT OP MED AT LUKKE VARIABLEN MYWORDAPP
                    Set MyWordApp = Nothing
                End If
            End If
        End If
    End If
End Sub
Avatar billede h_s Forsker
31. oktober 2006 - 07:42 #16
Tak - prøver og sætte den ind og vender tilbage - Kan se du har rettet dit sytkke til konstanterne Referater - Tak, men jeg vidste det nu godt - Var bare ikke kommet så langt :-)
Avatar billede h_s Forsker
31. oktober 2006 - 21:13 #17
Fantastisk det virker - tak Kabbak :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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