Avatar billede jath08ac Forsker
17. december 2014 - 09:02 Der er 10 kommentarer og
1 løsning

Slet kodning i "Microsoft Visual Basic for Applications" ved hjælp af VBA kode - 1.000 point

Jeg har lavet en VBA kode, se neden for, som kopirer 4 faner til en ny Excel fil, ved at klikke på en knap, som indeholder nedenstående VBA kode. Mit problem er, at de 4 faner indeholder VBA koder, som er lavet i "Microsoft Visual Basic for Applications" (Visual Basic).

Når de 4 faner bliver kopieret til en ny Excel fil, kunne jeg godt tænke mig, at nedenstående VBA kode automatisk sletter de koder som ligger i Visual Basic. Ved ikke om dette er muligt?

På forhånd tak for hjælpen:

PS: Er villig til at give 1.000 point

VBA kode
Sub OvfRegnskab()
    Sheets(Array("Hovedtal", "Resultatopgørelse", "Balance", "Noter")).Select
    Sheets("Resultatopgørelse").Activate
    Sheets(Array("Hovedtal", "Resultatopgørelse", "Balance", "Noter")).Copy
    ActiveWindow.SmallScroll Down:=-12
    Cells.Select
    Range("A35").Activate
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-50
    Range("B2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Hovedtal for selskab"
    Range("C2").Select
    Sheets("Resultatopgørelse").Select
    ActiveWindow.SmallScroll Down:=-40
    ActiveWindow.DisplayHeadings = True
    ActiveSheet.Unprotect
    Rows("1:7").Select
    Range("A7").Activate
    Selection.Delete Shift:=xlUp
    Cells.Select
    Range("B2").Activate
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Resultatopgørelse"
    Columns("E:L").Select
    Selection.EntireColumn.Hidden = False
    Range("F:F,J:J").Select
    Range("J1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("D8").Select
    Windows("selskab.xlsm").Activate
    Sheets("Balance").Select
    ActiveWindow.DisplayHeadings = True
    ActiveSheet.Unprotect
    Rows("1:5").Select
    Selection.Delete Shift:=xlUp
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Balance"
    Columns("E:K").Select
    Selection.EntireColumn.Hidden = False
    Range("F:F,J:J").Select
    Range("J1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("D6").Select
    Sheets("Noter").Select
    ActiveWindow.DisplayHeadings = True
    Rows("1:4").Select
    ActiveSheet.Unprotect
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=-93
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("C3").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Noter"
    Columns("C:H").Select
    Selection.EntireColumn.Hidden = False
    Range("D:D,G:G").Select
    Range("G1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("C3").Select
    ActiveWindow.SmallScroll Down:=-41
    Sheets("Hovedtal").Select
End sub
Avatar billede supertekst Ekspert
17. december 2014 - 09:42 #1
Hvis du gemmer den nye Excel fil som xlsx - d.v.s. uden VBA - så er problemet vel løst
Avatar billede Dan Elgaard Ekspert
17. december 2014 - 09:49 #2
Normalt vil jeg sige, at dette er ufatteligt let, hvis man har bare en lille smule forstand på VBA programmering...

Men, det er jeg ikke så sikker på, at du har, hvis jeg kigger på din kode, der både ser ud til, at være lavet med makrooptageren, og desuden kan kodes ned til kan at fylde ca. 1/4 af, hvad den fylder nu - samt kan laves, så koden kører ca. 1.000 gange hurtige (nej, ikke en fejl - der står tusind).

Så, der er to muligheder...

Hvis jeg tager fejl, og du kan finde ud af VBA programmering, så er løsningen her:
http://www.cpearson.com/excel/vbe.aspx

Har jeg ret, og du ikke, ved ret meget om det, så er bedste metode, at du finder et forum, hvor du kan uploade regnearket, så vi kan kigge på det og evt. lave det for dig...
Må jeg anbefale:
http://forum.excel-regneark.dk/
Avatar billede jath08ac Forsker
17. december 2014 - 10:46 #3
Tak for dine forslag :-)

Du har ret, jeg ikke så meget forstand på VBA programmering :-) Men har du ikke muliged for at hjælpe, også evt. uden at sende Excel arket?
Avatar billede supertekst Ekspert
17. december 2014 - 10:55 #4
Hvad med #1?
Avatar billede jath08ac Forsker
18. december 2014 - 09:36 #5
Problemet er, at jeg ikke kommer til at sidde med Excel filen, så jeg har ingen mulighed for at sikre mig, at de personer der skal arbejde i Excel filen, gemmer det som en xlsx. fil.
Avatar billede supertekst Ekspert
18. december 2014 - 10:33 #6
Det skal indlægges i VBA koden i forbindelse med kopieringen.
Avatar billede KurtOA Praktikant
29. december 2014 - 12:51 #7
Til inspiration....
jeg har engang fundet denne kode på nettet et sted....
sletter automatisk kodemodulet: "Module1"

Sub DeleteModule1()

Dim vbCom As Object

    MsgBox "Hi, I will delete myself "
    Set vbCom = Application.VBE.ActiveVBProject.VBComponents

    vbCom.Remove VBComponent:= _
    vbCom.Item("Module1")

End Sub
Avatar billede jath08ac Forsker
04. januar 2015 - 11:35 #8
#7: Jeg kan desværre ikke få det til at fundere. Det går i fejl ved koden:
"Set vbCom = Application.VBE.ActiveVBProject.VBComponents"

Koderne ligger heller ikke i et modul, men under det enkle sheets. Der er 4 sheets hvor VBA koderne skal slettes fra.
Avatar billede KurtOA Praktikant
04. januar 2015 - 12:30 #9
Hm....
Denne kode kan slette koden fra et givet ark....
måske den på en eller anden måde kan bruges?

Sub sletkoderfraWorksheet()

Dim arkNavn As String
arkNavn = "Ark2"

With ThisWorkbook.VBProject.VBComponents(arkNavn)
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End With

End Sub


eller denne der sletter fra ALLE ark?
OBS - sletter koden UDEN advarsler !!


Sub sletkoderfraalleWorksheet()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Sheets

arkNavn = ws.Name
With ThisWorkbook.VBProject.VBComponents(arkNavn)
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines
End With

Next ws

End Sub
Avatar billede supertekst Ekspert
21. januar 2015 - 13:07 #10
Status??
Avatar billede jath08ac Forsker
13. januar 2016 - 14:00 #11
lukket
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

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