15. september 2007 - 10:24Der er
15 kommentarer og 1 løsning
Kopiere en celle fra et ar ktil et andet via Makro
Jeg har idag en makro hvor en celle fra ark 1 kopieres over til en celle i ark 2.
Problemet er bare at den celle jeg har i ark1 indeholder en formel (lopslag), men den celle der bliver kopieret over til ark2 kun får kopieret den værdi som lopslaget har lavet.
Kan man få den til at kopiere formlen med over istedet? (så der også er et lopslag i ark2)
JEg sætter lige en stump af koden ind. Håber at det giver meningen. Elles sætter jeg gerne hele koden ind (den er noget længere)
.... .... If IsNumeric(Data(J, 3)) Or IsNumeric(Data(J, 5)) Then
If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
If Data(J, 7) <> poster(K - 1, 8) And poster(K - 1, 2) <> "" Then
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Jeg har prøvet exelents forsøg, men det virkede ikke. Kabbaks forslag kan jeg ikke lige finde ud af at implementere :-). Er ikke stærk nok i vba.
Den kode jeg har henter data fra ark1 hvis der ENTEN er tal i kolonne c ELLER kol D ELLER begge kolonner.
Hvis der er data i en af de celler skal den hente hele linien over. Det vil sige KOL A-O (helst med formler)
Den kode jeg sætter ind nu har jeg brugt til noget lignende (dog uden formler)og håbede på at jeg kunne genbruge koden.
I ark1 er der ca. 4000 linier med lopslag i flere kolonner på hver linie. Der er dog kun ca. 50 af linierne der har tal i (forskellige fra gang til gang)
Derfor vil jeg gerne have en kode der henter de linier der ENTEN har tal i kolonne kol c ELLER kol D ELLER i begge kolonner.
Jeg sætter lige den kode ind jeg har brugt, men efter hvad I lige har skrevet tror jeg ikke at den kan bruges, eller hvad siger I?
Ark1=konto Ark2=oversigt1
Sub opdaterkoder()
Application.ScreenUpdating = False
With Worksheets("konto")
Start = 1
Slut = .Range("A65536").End(xlUp).Row
For I = 2 To Worksheets("oversigt1").Range("C65536").End(xlUp).Row
If Not IsEmpty(Cells(I, 1).Value) Then
For J = Start To Slut
If Cells(I, 1).Value = .Cells(J, 1).Value Then
If Cells(I, 9).Value <> .Cells(J, 7).Value Then
.Cells(J, 7) = Cells(I, 9)
End If
Start = J
Exit For
End If
Next J
End If
Next I
End With
' herefter hentes de opdaterede overskrifter ind i arket igen
Dim poster()
With Worksheets("konto")
Data = .Range("A5:I" & .Range("B7000").End(xlUp).Row + 1)
Det betyder at alt indlæses som formler, og alle værdier som tekst, så der hvor formlerne viser en værdi, er det kun formlen der kommer med, ikke værdien.
Set sh1 = Sheets("Ark1")'ret evt. navn Set sh2 = Sheets("Ark2")'ret evt. navn r1 = sh1.Cells(65500, 1).End(xlUp).Row For t = 2 To r1 r2 = sh2.Cells(65500, 1).End(xlUp).Row + 1 If IsNumeric(sh1.Cells(t, "C")) Or IsNumeric(sh1.Cells(t, "D")) Then For tt = 1 To 15 sh2.Cells(r2, tt) = sh1.Cells(t, tt).Formula Next End If Next
Data = .Range("A5:I" & .Range("B7000").End(xlUp).Row + 1) ' variabel med tal Data1 = .Range("A5:I" & .Range("B7000").End(xlUp).Row + 1).Formula ' variabel med formler
og længere nede
poster(K, 0) = Data(J, 1)
poster(K, 2) = Data(J, 2)
poster(K, 4) = Replace(Data1(J, 3), "A" & J + 4, "A" & K + 5) ' oversætter formler, spå de peger på rigtige celle
poster(K, 6) = Replace(Data1(J, 5), "A" & J + 4, "A" & K + 5)
poster(K, 8) = Data1(J, 7)
poster(K, 10) = Data(J, 8)
Så hvis du vil have formler bruger du Data1 men husk at oversætte formler så di peger på den rette celle.
Public Sub HentKonto() Dim Data As Variant, Data1 As Variant, Poster() As Variant, I As Long, X As Integer Dim Antal As Long, K As Long With Worksheets("konto") Application.ScreenUpdating = False
RW = .Range("A7000").End(xlUp).Row + 1 Data = .Range("A5:O" & RW) ' variabel med tal Data1 = .Range("A5:O" & RW).Formula ' variabel med formler End With Antal = UBound(Data, 1) On Error Resume Next For I = 1 To UBound(Data, 1) If Data(I, 3) = 0 And Data(I, 5) = 0 Then Data(I, 1) = Empty Antal = Antal - 1 End If Next ReDim Poster(Antal, UBound(Data, 2) - 1) K = 0
For I = 1 To UBound(Data, 1) If Not IsEmpty(Data(I, 1)) Then For X = 1 To UBound(Data, 2) - 1 Poster(K, X - 1) = Replace(Data1(I, X), I + 4, K + 5)
Next K = K + 1 End If Next With Worksheets("ark1") ' ret til det ark du vil have det i Range(Range("A5"), ActiveCell.SpecialCells(xlLastCell)).ClearContents .Range("A5").Resize(UBound(Poster, 1), UBound(Poster, 2)) = Poster End With Application.ScreenUpdating = True
ret lige Range(Range("A5"), ActiveCell.SpecialCells(xlLastCell)).ClearContents
til .Range(Range("A5"), ActiveCell.SpecialCells(xlLastCell)).ClearContents
Synes godt om
Ny brugerNybegynder
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.