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"
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.
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
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
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"
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
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!
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
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
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
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
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 :-)
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.