23. januar 2004 - 00:41Der er
30 kommentarer og 1 løsning
Sortering i delte mapper
Hej
Jeg har en projektmappe hvor jeg (vha vba) har lavet en sortering på Range("A3:I1000"). I kolonne J er der fortløbende numre som ikke skal sorteres med og det fungerer fint. Efter at mappen er blevet delt respekteres koden IKKE Rangen men sorterer alle kolonner. Kan dette undgås? Kan man anvende en anden sortering i delte mapper? P.S. Det skal helst fungere i Xl2002 og Xl97.
Jeg har ingen umiddelbar løsning, men nogle ting virker bare ikke i delte mapper. Har selv har koder, der bare ikke ville køre som normalt når mappen er delt :-(
Yes, ved det godt. Her er kun tilbage at eksperimentere selv :-) Så er det selvfølgelig noget snask at man hele tiden skal skifte mellem delt / udelt, fordi man ikke kan komme til koden i delt tilstand.
Sub FindEfterlysteDyr() Application.ScreenUpdating = False Dim Data As Variant ' NY Sheets("Resultat").Activate Range("A2:H100").Select Selection.ClearContents UserForm1.ListBox1.Clear ' NY Dim Søg As String, twb As Workbook Set twb = ThisWorkbook Søg = InputBox("Indtast søgetekst") If Søg <> "" Then With Sheets("Efterlyste dyr").Range("D3:E1000") Call SorterEfterlyste
Set S = .Find(Søg, LookIn:=xlValues) If Not S Is Nothing Then firstAddress = S.Address Do
Set S = .FindNext(S)
If Left(S.Address, 2) = "$D" Then With Sheets("Resultat").Range("A65536").End(xlUp) .Offset(1, 1) = S.Value .Offset(1, 0) = S.Offset(0, -3).Value .Offset(1, 2) = S.Offset(0, 1).Value .Offset(1, 3) = S.Offset(0, 2).Value .Offset(1, 4) = S.Offset(0, 3).Value .Offset(1, 5) = S.Offset(0, 4).Value .Offset(1, 6) = S.Offset(0, 5).Value .Offset(1, 7) = S.Offset(0, 7).Value End With
Loop While Not S Is Nothing And S.Address <> firstAddress
Call Sorter97Resultat Call DeleteDuplicateRows A = Sheets("Resultat").Range("A65536").End(xlUp).Row 'NY Data = Sheets("Resultat").Range("A2:I" & A) 'NY
Unload FrmIndsætData
For x = LBound(Data, 1) To UBound(Data, 1) Data(x, 1) = CStr(Data(x, 1)) Next
A3:I1000 - det var noget jeg forsøgte for at få delingen til at fungere. Sorter97 fungerer fint for den skal ikke tage hensyn til en kolonne der ikke må sorteres. Jeg avde overvejet at smide kolonnen med numrene i kolonne a i stedet men det gør INGEN forskel. Når man vælger sorter i delt-tilstand vælger den tilsyneladende alle kolonner men kun det antal rækker hvor der er data!
Jeg ved godt at det sinker lidt, men ikke overvældende... Prøv at kopier A3:I1000 til et tomt ark, sorter det og smid det tilbage oveni. noget al'a Range("efterlyste").copy destination:=Sheets("TomtArk").range("A1") Sheets("TomtAtk").Range("A1").Sort Key1:=Sheets("TomtArk").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Sheets("TomtARk").Range("A1:I1000").copy destination:= Sheets("Efterlyste dyr").Range("A3")
-->Bak det fungerer faktisk. Skide godt. Desværre bliver den lidt langsom af at skulle kopiere så meget i DELT tilstand så jeg har reduceret A3:I100 men jeg er ikke sikker på at det på sigt er nok. Istedet prøvede jeg (hurtigere):
Men der går et eller andet galt idet den kopiere den sidst indsatte række igen og uden at den er sorteret. Kan du se hvad der er galt med koden? Tak for hjælpen - gider du svare så får du point :0)
Med en test på ca. 2000 rækker går det så hurtigt, at jeg ikke kan nå at se den arbejder. (1500 mhz) Dette vil muligvis ændre sig når jeg prøver min egen 600 mhz maskine :-)
Det kørte fantastisk hurtigt og godt indtil jeg delte mappen. Den kan åbenbart ikke slette et sheet i delt tilstand. Hvorfor kører den egentlig så hurtigt?
tjah, i bund og grund skal den jo jun lave tre hurtige operationer, 2 kopier og en sorter. Jeg har lige prøvet med en delt version, det er absolut ikke hurtigt :-(
Nu har jeg blot oprettet et skjult ark TomtArk der er skjult og ikke slettes og det fungerer tilsyneladende godt og er da rimelig hurtigt. Men hvor kunne delingen dog trænge til kærlig Microsofthånd. Tak for hjælpen - bak.
Faktisk har jeg lige fundet ud af at hvis man gemmer mellem hver gang man kører denne makro, kan den holde et fornuftigt tempo. (ubder 1 sek) Hvis man glemmer at gemme bliver det til 280 sek men fuld CPU-belastning. Denne bruger også et tomt ark, og burde måske være hurtigere endnu
Sub test3() Dim TomtArk As Worksheet, shCopySheet As Worksheet Dim rgCopyArea As Range, rgPasteArea As Range Set TomtArk = Worksheets("TomtArk") Set shCopySheet = Sheets("Efterlyste dyr") Set rgCopyArea = shCopySheet.Range("A3", shCopySheet.Range("I65536").End(xlUp)) Set rgPasteArea = TomtArk.Range(rgCopyArea.Address) Application.ScreenUpdating = False
Hej bak Der skal lige en sletteprocedure i toppen af sub'en ellers vil den kode der er anbragt i Worksheet_Change bevirke at man ikke slette en linie jvf:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False Dim Trange As Range Dim C As Range Set Trange = Range("A3: A1000") 'slå alle events fra da vi her henter nye data og den ellers vil køre igen. Application.EnableEvents = False
On Error GoTo Slut
'check om den indtastede celle er i Trange If Not Intersect(Target, Trange) Is Nothing Then 'Hvis cellen ikke er tom (blevet slettet)
If Len(Target.Value) = 0 Then 'Target.EntireRow.ClearContents Dim Msg, Style, Title, Ctxt, Response, MyString Msg = "Ønsker du at slette rækken?" ' Define message. Style = vbYesNo + vbDefaultButton2 ' Define buttons. Title = "Meddelelsesbox" ' Define title. Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then Target.Offset(0, 1).ClearContents Target.Offset(0, 2).ClearContents Target.Offset(0, 3).ClearContents Target.Offset(0, 4).ClearContents Target.Offset(0, 5).ClearContents Target.Offset(0, 6).ClearContents Target.Offset(0, 7).ClearContents Target.Offset(0, 8).ClearContents ' Call SorterEfterlyste Else Target = BeforeVal 'NY Indsætter den gamle værdi igen End If
End If
End If Application.EnableEvents = True Exit Sub
'slå events til igen Slut: Application.EnableEvents = True 'MsgBox ("Fejl fundet") End Sub
Jeg havde egentlig blot skrevet (TomtArk): Range("A1:I200").Clearcontent men hvis man istedet kunne anvende Range("I65536").End(XlUp) ville det vel være bedre - kan du hurtigt klare det (dumt spørgsmål)?
Nå pyt jeg har anvendt den forrige kode jvf nedstående - jeg ved ikke helt hvorfor det med datoformatet opstod. Jeg kunne desværre ikke løse det.
Dim TomtArk As Worksheet, shCopySheet As Worksheet Dim rgCopyArea As Range, rgPasteArea As Range Sheets("TomtArk").Range("A1", Sheets("TomtArk").Range("I65536").End(xlUp)).ClearContents Application.ScreenUpdating = False Set TomtArk = Worksheets("TomtArk") Set shCopySheet = Sheets("Efterlyste dyr") Set rgCopyArea = shCopySheet.Range("A3", shCopySheet.Range("I65536").End(xlUp)) rgCopyArea.Copy Destination:=TomtArk.Range("a1") Set rgPasteArea = TomtArk.Range("A1", TomtArk.Range("I65536").End(xlUp)) rgPasteArea.Sort Key1:=TomtArk.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom rgPasteArea.Copy Destination:=shCopySheet.Range("A3")
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.