Avatar billede h_s Forsker
05. september 2007 - 20:47 Der 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

Det har nok noget med "Sti" at gøre - men hvad?
05. september 2007 - 21:22 #1
Du kan ikke sætte en constant til at være = en variabel... en Const skal have en fast værdi, som du skriver direkte i koden.

du kan ændre
Const Kunobeller As String = Sti
til
Dim Kunobeller As String = Sti

Det gælder selvfølgelig også resten af dine konstanter...
Avatar billede jkrons Professor
05. september 2007 - 21:23 #2
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.
Avatar billede h_s Forsker
06. september 2007 - 18:55 #3
Flemmingdahl> Jeg forstår godt havd I skriver. Og har også prøvet at ændre Const til Dim uden held. Jeg får følgenden fejl: Compile Error

Vil du ikke prøve at ændre hele teksten til det rigtige?!
Avatar billede h_s Forsker
10. september 2007 - 20:26 #4
Har I glemt mig? :-)
Avatar billede jkrons Professor
11. september 2007 - 23:54 #5
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\"

og så fremdeles.
Avatar billede jkrons Professor
11. september 2007 - 23:55 #6
Men det kunne måske gøre det hele lidt nemmere, hvis du prøver at fortælle, hcvad du ønsker at opnå med din kode.
Avatar billede h_s Forsker
12. september 2007 - 16:39 #7
jkrons> Du kan få hele koden :-)

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

                        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

  '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
Avatar billede jkrons Professor
12. september 2007 - 17:26 #8
Prøv atv starte med følgende:

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")

    '-----------------------------------------------------------------------------------------------------------------

    If x = "" Then

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.
Avatar billede h_s Forsker
12. september 2007 - 19:56 #9
Jeg får en fejl her:

'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?
Avatar billede h_s Forsker
06. oktober 2007 - 17:39 #10
flemmingdahl> har du glemt mig?
06. oktober 2007 - 19:49 #11
Jeg kender jo ikke H_S og mener ikke at have lovet dig noget. Nogen har villet betale mig for at arbejde, og så får eksperten jo hurtigt en pause.
23. november 2007 - 14:08 #12
Har du husket at sætte reference til Word??

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?
Avatar billede h_s Forsker
22. december 2007 - 20:28 #13
Har droppet at finde fejlen.
Tak for indsatsen, men jeg kunne ikke bruge nogen af forslagene!
God Jul og godt Nytår!
25. december 2007 - 12:04 #14
Hvis du vil lege videre, så har jeg et gammelt eksempel her http://www.smartoffice.dk/Tips/LibrarySource.asp?App=Excel&Lib=ExcelUsingWord du skal selvfølgelig huske at sætte ref. til din version af Word og ikke 9.0 som eksemplet viser.
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