Avatar billede folj Forsker
27. januar 2020 - 10:16 Der er 7 kommentarer og
3 løsninger

Min excel-fil med vba-automatiseringer vokser til 10 gang størrelse

Min excel baserede plan der bruges dagligt af mange brugere er med nogle VBA-automatiseringer, som bl.a. laver et dagligt kopi af sig selv (hvor de kører en SaveCopyAs og generere et unikt navn og dette kopi gemmes i en Backupmappe,.
Disse daglige kopier slettes igen efter eksempelvis 30 dage.
Med én kopi fra hvert månedsskifte slettes dog ikke, og derfor har jeg kopier liggende fra hvert månedsskifte lang tid tilbage.

Jeg kan se at planen i forhold til 1. okt 2019 er begyndt at stige voldsomt i størrelse, fra normalt at fylde ca. 1 MB nu pludselig er oppe på 10 MB størrelse.

Det jeg mest bekymrer mig om er om filen bliver tungere og tungere at arbejde med, og worstcase bliver uhåndterbar for brugernes PC'er.

jeg mangler nogle fórslag til hvad jeg skal undersøge først, som mulig årsagsopklaring til hvorfor den vokser sig fra 1 - 10 MB i størrelse.

måske er der ro på nu her ved 10 MB, men det er nok lidt tidligt at konkludere det. størrelse den 1.10  var 1MB. den 1.11 fyldte den ca. 7 MB, og fra den 1 dec.ca 11 MB, og efter de daglige kopier at demme ser det ud til at stabilisere sig ved de 11 MB

Grunden til jeg skrev at den kører med VBA-automatiseringer er ikke for at få Jer til at fokusere for meget på dette. Blot for at have så meget info med  fra starten.

Spørgsmål til eksperterne:
Hvad skal jeg fokusere på i min årsagsopklaring?
Avatar billede Jan K Ekspert
27. januar 2020 - 10:46 #1
En mulighed kan være at slette alle tomme rækker og kolonner inden du gemmer. Har de været i brug optager de plads, også selv om deres indhold er slettet.
Avatar billede Daffodil Professor
27. januar 2020 - 10:47 #2
Jeg har haft samme problem med en fil på ca. 50 MB der steg til det dobbelte.
Jeg skulle rense en fil og manipulere en del data med VBA kodning og dette gjore at den steg i MB. Min løsning var at det færdige resultat via VBA blev kopieret over i et nyt ark som så blev gemt som kopien (ca. 36 MB). Jeg prøvede at REDIM men fik det ikke til at virke tilfredsstillende.
Avatar billede folj Forsker
27. januar 2020 - 11:01 #3
@Jan K:
Der opstår ikke nogle tomme rækker.

Og planen vedligeholder sig selv vha. VBA-automatiserineg der både tilføjer nye rækker, så planen altid rækker et helt år frem, og gamle rækker slettes også med VBA-automatiosering.
Avatar billede thomas_bk Ekspert
27. januar 2020 - 12:49 #4
Ikke en egentlig løsning, men prøv evt at teste med 'show used range' og se hvad excel selv mener der er aktive områder i arkene.
Avatar billede folj Forsker
30. januar 2020 - 12:12 #5
@thomas_bk
Og hvor er det lige jeg kan finde  'show used range' ?
Avatar billede thomas_bk Ekspert
30. januar 2020 - 12:48 #6
activesheet.usedrange.address
denne giver dig 'yderste' punkt.

brug evt.
msgbox activesheet.usedrange.address

eller denne

Sub Show_used_ranges()

Dim ws As Worksheet
Dim lCount As Long
Dim wsTemp As Worksheet
Dim rngF As Range
Dim lFields As Long
Dim strLC As String
Dim strSh As String
Dim sh As Shape

Application.EnableEvents = False
Application.ScreenUpdating = False
On Error Resume Next
 
  Set wsTemp = Worksheets _
      .Add(Before:=Sheets(1))
  lCount = 2
  lFields = 5
 
  With wsTemp
    .Range(.Cells(1, 1), _
      .Cells(1, lFields)).Value _
          = Array( _
              "Sheet Name", _
              "Used Range", _
              "Range Cells", _
              "Shapes", _
              "Last Cell")
  End With
 
  For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> wsTemp.Name Then
      strSh = ""
      strLC = ws.Cells _
        .SpecialCells(xlCellTypeLastCell) _
          .Address
      If ws.Shapes.Count > 0 Then
        For Each sh In ws.Shapes
          strSh = strSh & sh.TopLeftCell _
              .Address & ", "
        Next sh
        strSh = Left(strSh, Len(strSh) - 2)
      End If
 
      With wsTemp
        .Range(.Cells(lCount, 1), _
          .Cells(lCount, lFields)).Value _
          = Array( _
              ws.Name, _
              ws.UsedRange.Address, _
              ws.UsedRange.Cells.Count, _
              strSh, _
              strLC)
        'add hyperlink to sheet name
        .Hyperlinks.Add _
            Anchor:=.Cells(lCount, 1), _
            Address:="", _
            SubAddress:="'" & ws.Name _
                & "'!A1", _
            ScreenTip:=ws.Name, _
            TextToDisplay:=ws.Name
        'add hyperlink to last cell
        .Hyperlinks.Add _
            Anchor:=.Cells(lCount, lFields), _
            Address:="", _
            SubAddress:="'" & ws.Name _
                & "'!" & strLC, _
            ScreenTip:=strLC, _
            TextToDisplay:=strLC
       
        lCount = lCount + 1
      End With
    End If
  Next ws

With wsTemp
    .Range(.Cells(1, 1), .Cells(1, lFields)) _
      .EntireColumn.AutoFit
    .Rows(1).Font.Bold = True
End With

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
Avatar billede folj Forsker
03. februar 2020 - 09:51 #7
@thomas_bk

Ja nu har jeg testet med dit forslag
div]msgbox activesheet.usedrange.address[/div]
og jeg fik udskrevet adresserne på området.
msgbox activesheet.usedrange.address
Jeg kan se at den yderste celle er den man kommer til hvis man bruger begge scroll-håndtag hhv. helt ud til højte og helt ned.

Kan jeg reducere dette område?
Avatar billede Jan K Ekspert
03. februar 2020 - 11:09 #8
Marker alle tomme rækker og slet dem. Gentag med kolonner. Det er rækker og kolonner, du skal slette, ikke deres indhold. Gem så og se om ikke det har hjulpet.
Avatar billede folj Forsker
03. februar 2020 - 12:59 #9
@thomas_bk
Ja det var noget der hjalp:
Takker for dit fine input.
Avatar billede folj Forsker
04. februar 2020 - 09:57 #10
Resultatet blev så godt ar vi nu er tilbage på den oprindelige størrelse ca. 1,1 MB, og msgbox activesheet.usedrange.address udskriver netop adresen på det område jeg har aktive data i.

Takker for Jeres engagement og  hjælp.
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