Avatar billede alen32 Nybegynder
05. november 2007 - 17:51 Der er 8 kommentarer og
1 løsning

Hjælp til fejlmeddelse

Hej!
Jeg har på ark1 en listbox og en komand knap. Jeg har lavet en makro så når brugeren vælger noget i listbox og trykker på knap så indsættes 3 rækker fra andre ark på ark1.
Makroen består af mange blokke som er næsten identiske, men efterhånden har jeg lavet mange blokke så jeg får fejlmeddelelse :" Compile error-Procedure too large.
Hvad kan jeg gøre?
If ListBox1.Value = "Delta" Then

Worksheets("vj").Range("4:4").Copy
   
    With Worksheets("Ark1").Range("24:24")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    Worksheets("vj").Range("5:5").Copy
    With Worksheets("Ark1").Range("26:26")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    Worksheets("vj").Range("6:6").Copy
    With Worksheets("Ark1").Range("27:27")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
  End If

If ListBox1.Value = "Dba" Then
Worksheets("vj").Range("8:8").Copy
   
    With Worksheets("Ark1").Range("24:24")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    Worksheets("vj").Range("9:9").Copy
    With Worksheets("Ark1").Range("26:26")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    Worksheets("vj").Range("10:10").Copy
    With Worksheets("Ark1").Range("27:27")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    End If

osv....
Avatar billede jkrons Professor
05. november 2007 - 18:57 #1
Du kan bryde din procedure ned i enkeltdele, så hver kopieringsblok bliver en selvstændig procedure. Derefter kan du lave en ekstra procedure med Select Case, der testet på, hvad der vælges i Listbox'en, og så kalder den relevante procedure.
Avatar billede alen32 Nybegynder
05. november 2007 - 19:04 #2
Jeg har brudt min procedure i flere sub og indsæt dem i module 1 og 2, men når jeg kalder proedure så får jeg fejlmeddelse:"object required og den første linie i nedenstående procedure bliver markeret gult.

Sub data()

  If listbox1.Value = "Ragna" Then

Worksheets("vj").Range("4:4").Copy
   
    With Worksheets("Ark1").Range("24:24")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteComments
    End With
    End If
End Sub
Avatar billede jkrons Professor
05. november 2007 - 19:13 #3
Jeg havde forestillet med noget i stil med:

Sub eteller andet

Select Case listbox1.value
Case is = "Ragna"
Call .... (navn på procedure, der kopierer det relevante")
Case is = "Delta"
Call .... (navn på procedure, der kopierer det relevante")
osv.
End Select

End sub

og så ingen IF listbox.value = i de enkelte procedurer.
Avatar billede kabbak Professor
05. november 2007 - 19:19 #4
If Worksheets("Ark1").listbox1.Value = "Ragna" Then
Avatar billede jkrons Professor
05. november 2007 - 19:28 #5
Proceduren, der kører skal vel udløses af en hændelse i det ark, derc indeholder listboxen?
Avatar billede kabbak Professor
05. november 2007 - 19:41 #6
Du kan spare linjer ved at kun bruge With

With Worksheets("Ark1")
        If .ListBox1.Value = "Delta" Then
            Worksheets("vj").Range("4:4").Copy
            .Range ("24:24")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteComments
            Worksheets("vj").Range("5:5").Copy
            .Range ("26:26")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteComments
            Worksheets("vj").Range("6:6").Copy
            .Range ("27:27")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteComments
        End If
    End With
Avatar billede kabbak Professor
05. november 2007 - 19:47 #7
Jeg var vist for hurtig.
Sådan:

With Worksheets("Ark1")
    If .ListBox1.Value = "Delta" Then
            Worksheets("vj").Range("4:4").Copy
            .Range("24:24").PasteSpecial xlPasteValues
            .Range("24:24").PasteSpecial xlPasteComments
            Worksheets("vj").Range("5:5").Copy
            .Range("26:26").PasteSpecial xlPasteValues
            .Range("26:26").PasteSpecial xlPasteComments
            Worksheets("vj").Range("6:6").Copy
            .Range("27:27").PasteSpecial xlPasteValues
            .Range("27:27").PasteSpecial xlPasteComments
        End If
    End With
Avatar billede alen32 Nybegynder
05. november 2007 - 20:05 #8
Nu virker det! Tak kabbak og jkrons for hjælp. Det er vist noget med hukommelsen så koden må ovestige x antal linier.
Så må i give svar!
Avatar billede kabbak Professor
05. november 2007 - 21:24 #9
et svar ;-))
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