05. september 2007 - 20:47Der er
13 kommentarer og 1 løsning
Fejl i makro
Dette er starten på min makro: Dim Sti As Variant Set x = Worksheets("Info").Range("C3") Set y = Worksheets("Info").Range("H3")
Sti = Worksheets("Trin").Range("E29").Value
Const Bogmærke As String = "Navn" Const Kunobeller As String = Sti 'Mappe hvor programmet ligger i Const Referater As String = Sti & "Referater\" 'Dette er mappen hvor den gemmer wordfilen Const Skabeloner As String = Sti 'Dette er mappen hvor den finder skabelonen Const DotName As String = "Kuno Beller.dot" 'Dette er navnet på skabelonen Const CellStr As String = "C3" 'Dette er feltet hvor den finder navnet på eleven
Jeg har prøvet at definere "Sti". Stien står i celle E29 i ark Trin. Når jeg køre makroen får jeg følgende fejl: Constant expression required
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Du prøver at sætte en konstant lig en variabel. Det er meningsløst - i hvert fald for VBA :-) En konstant er karkaterisret ved, at dens værdi ikke kan ændres, når den først er erklæret, men dels sætter du den lig en variabel, "Sti", og dels er sti i isig selv en referencetil en celle med ukendt indhold.
Dim sti As Variant Dim kunobeller As String sti = Worksheets("Ark1").Range("A1").Value kunobeller = sti
Men det gælder for alle de konstanter, hvori Sti indgår, at de skal erklæres som variable, ikke som konstanter. Altså fx
Dim sti As Variant Dim kunobeller As String Dim Referater As String sti = Worksheets("Ark1").Range("A1").Value kunobeller = sti referater = sti & "referater\"
Det makroen skal gøre er, at åbne et Worddokument (skabelon), der i dag ligger i mappen Skabeloner - Det er ikke meningen i fremtiden. Nu skal den ligge i mappen Kuno Beller. I mappen Kuno Beller skal der være en mappe Referater, som doc-dokumentet skal gemmes i. Navnet for filen laves ud fra det der står i nogle celler i filen, som makroen køres fra. Hvis Referater ikke findes oprettes mappen. Den sti, hvor Kuno Beller\Referater skal være, skal være afhængig af, hvor den xls-fil, som makroen køres fra er åbnet fra. Det var det jeg vil have stående i Worksheets("Trin").Range("E29").
Der hentes en del info fra xls-filen over i doc-filen - Det virker, så det skal der nok ikke røres ved!
Der er fejl i det øverste - Det var det jeg har bedt om hjælp til.
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 Dim Sti As Variant Set x = Worksheets("Info").Range("C3") Set y = Worksheets("Info").Range("H3")
Set Sti = Worksheets("Trin").Range("E29")
Const Bogmærke As String = "Navn" Const Kunobeller As String = Sti 'Mappe hvor programmet ligger i Const Referater As String = Sti & "Referater\" 'Dette er mappen hvor den gemmer wordfilen Const Skabeloner As String = Sti 'Dette er mappen hvor den finder skabelonen Const DotName As String = "Kuno Beller.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
'test af lås formular MyWordApp.ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
'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
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 Const Bogmærke As String = "Navn" Const DotName As String = "Kuno Beller.dot" 'Dette er navnet på skabelonen Const CellStr As String = "C3" 'Dette er feltet hvor den finder navnet på eleven Dim KunoBeller As Variant Dim Referater As String Dim Skabeloner As String
KunoBeller = Worksheets("Trin").Range("E29") 'Mappe hvor programmet ligger i Referater = KunoBeller & "Referater\" 'Dette er mappen hvor den gemmer wordfilen Skabeloner = Worksheets("Trin").Range("E29") 'Dette er mappen hvor den finder skabelonen
Set x = Worksheets("Info").Range("C3") Set y = Worksheets("Info").Range("H3")
osv. Du behøver egentlig ikke både Skabeloner og KunoBeller, hvis de alligevel har samme indhold, men det kan selvfølgelig være en fordel af overskuelighedsensyn.
'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
Jeg får følgende fejl: Run-time error '5151'.
Jeg tror det er fordi, at når jeg åbner xls-filen fra en Skabelon, vil Worksheets("Trin").Range("E29") blive C:\Documents and Settings\h_s\Dokumenter\ som er min standard sti til at gemme dokumenter. Jeg troede faktisk at det vil være stien hvor skabelonen lå. Det kunne løses ved at jeg i makroen indsætter noget ala
Sheets("Trin").Range("E39") = ActiveWorkbook.FullName eller Sheets("Trin").Range("E39") = ActiveWorkbook.Name
Men .FullName giver også sti og filnavn og .Name giver kun filnavn - Findes der noget, der kun viser stien?
Hvis ikke så skal du have gjort det... -Tools->References.. I dialogboksen vælger og markerer du "Microsoft Word 12.0 Object Library" (eller et mindre nummer end 12) Hjælper det?
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.