Avatar billede merico Nybegynder
21. marts 2009 - 01:11 Der er 4 kommentarer og
1 løsning

Slet række i Excel

Hej

Jeg har lavet et program der kan indsætte rækker med formler i et Excel 2007 regneark. Jeg har implementeret en funktion som kan slette en række også. Problemet er at rækken under den som bliver slettet, får problemer med referencerne. Alle referencer til den slettede række bliver lavet om til =#REFERENCE! i stedet for blot at blive skiftet en ned. f.eks. fra A36 til A35.

F.eks.:

______A________B_
34| =A33*B34 |
35| =A34*B35 |
36| =A35*B36 |

Bliver til:

______A________B_
34| =A33*B34 |
35| =#Reference!*B36 |
Avatar billede kabbak Professor
21. marts 2009 - 10:36 #1
Du er nød til at opdatere formlen, lige efter du har slettet en række, her er et eksempel.


Sub Makro1()
Dim I As Integer, Col As String
  I = 35 ' rækken der skal slættes
  Col = "D" ' formelcellens kolonne
    Rows(I).Delete Shift:=xlUp
  Cells(I - 1, Col).AutoFill Destination:=Range(Col & I - 1 & ":" & Col & I), Type:=xlFillDefault
   
End Sub
Avatar billede merico Nybegynder
21. marts 2009 - 16:08 #2
Tak for dit svar. Har løst det på en anden måde nu. Ganske vist ikke så fint men det virker.

Private Function deleteRow(row)
    Dim i As Integer
    Dim rRow(10) As String
    Dim rRowNext(10) As String
    Dim vRowNext(10) As String
    rRowIn = Range("A" & row & ":K" & row).FormulaLocal
    rRowNextIn = Range("A" & row + 1 & ":K" & row + 1).FormulaLocal
    vRowNextIn = Range("A" & row + 1 & ":K" & row + 1).Value

    i = 0
    For Each rCell In rRowIn
        rRow(i) = rCell
        i = i + 1
    Next
   
    i = 0
    For Each rCell In rRowNextIn
        rRowNext(i) = rCell
        i = i + 1
    Next
   
    i = 0
    For Each vCell In vRowNextIn
        vRowNext(i) = vCell
        i = i + 1
    Next
   
    'Sletter rækken
    Range("A" & row).EntireRow.Delete
   
    If vRowNext(0) = "" Then
        Exit Function
    End If
   
    'laver ny række
    rowA = vRowNext(0)
    rowB = vRowNext(1)
    rowC = rRow(2)
    rowD = rRow(3)
   
    If rRowNext(4) = "=HVIS(D" & row + 1 & ">=0;E" & row & "+E" & row & "*B" & row & ";0)" Then
        rowE = rRow(4)
        'Range("E" & row).FormulaLocal = rowE
    Else
        rowE = vRowNext(4)
        'Range("E" & row).Value = rowE
    End If
   
    If rRowNext(5) = "=HVIS(C" & row + 1 & ">0;E" & row & "/B" & row & "+F" & row & ";0)" Then
        rowF = rRow(5)
        'Range("F" & row).FormulaLocal = rowF
    Else
        rowF = vRowNext(5)
        'Range("F" & row).Value = rowF
    End If
   
    rowG = rRow(6)
    rowH = rRow(7)
    rowI = rRow(8)
    rowJ = rRow(9)
   
    If rRowNext(10) = "=K" & row Then
        rowK = rRow(10)
    Else
        rowK = vRowNext(10)
    End If
    resultRow = Array(rowA, rowB, rowC, rowD, rowE, rowF, rowG, rowH, rowI, rowJ, rowK)
    Range("A" & row & ":K" & row).FormulaLocal = resultRow
End Function
Avatar billede merico Nybegynder
21. marts 2009 - 16:09 #3
Test svar
Avatar billede merico Nybegynder
21. marts 2009 - 16:09 #4
Vil du ikke smide et svar?
Avatar billede kabbak Professor
21. marts 2009 - 18:14 #5
;-))
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
Kurser inden for grundlæggende programmering

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