Just nu i M3-nätverket
Gå till innehåll

Lat behöver kom-igång-hjälp


Mikael63

Rekommendera Poster

Ah okej

 

testa lägg in i slutet

     rnSource.Parent.Activate
     If rnSource.Offset(1) <> "" Then
        rnSource.Offset(1).Select
    Else
        If rnSource.End(xlDown) = "" Then Exit Sub
        rnSource.End(xlDown).Select
    End If

så borde du få det du vill.

 

Jajamen - fungerar exakt som önskat. Stort tack :thumbsup:

 

 

Tillägg 151127, koden ser idag ut så här:

Sub CollectYttre()
    Dim rnSource As Range
    Set rnSource = ActiveCell

   ' Application.StatusBar = "Makro start, startcell " & rnSource.Address & ", " & rnSource.Parent.Name
    Dim wb As Workbook
    Set wb = Workbooks.Add()
    
    Dim ws As Worksheet
    Set ws = wb.Sheets(1) 'ActiveWorkbook.Sheets.Add()
    
    Dim rnTarget As Range
    Set rnTarget = ws.Range("a1")
    
    Action rnSource, rnTarget
    
    rnTarget.EntireRow.Copy
    Application.DisplayAlerts = False
    
    ActiveWorkbook.Save
        
End Sub
Länk till kommentar
Dela på andra webbplatser

  • 1 year later...

Har börjat bråka nu:

post-52940-0-84723700-1453905258_thumb.png

post-52940-0-36886900-1453905259_thumb.png

 

Trodde först det berodde på att jag hade en annan arbetsbok som mål men jag får samma felmeddelande om jag kör detta på den tidigare filen.

 

Varför?

 

Tillägg:

Det är alltså när jag växlat bok och ska klistra in det tar stopp.

Den temporära boken ligger kvar i bakgrunden.

 

Mera tillägg:

Felet berodde på att jag ändrat pga. denna tråd:

//eforum.idg.se/topic/349255-excel-sp%C3%B6kar-ibland-p%C3%A5-riktigt/?hl=sp%C3%B6kar

 

NU ser koden ut så här:

Sub CollectYttre()
    Dim rnSource As Range
    Set rnSource = ActiveCell

   ' Application.StatusBar = "Makro start, startcell " & rnSource.Address & ", " & rnSource.Parent.Name
    Dim wb As Workbook
    Set wb = Workbooks.Add()
    
    Dim ws As Worksheet
    Set ws = wb.Sheets(1) 'ActiveWorkbook.Sheets.Add()
    
    Dim rnTarget As Range
    Set rnTarget = ws.Range("a1")
    
    Action rnSource, rnTarget
    
    rnTarget.EntireRow.Copy
    Application.DisplayAlerts = False
    wb.Close False
    ActiveWorkbook.Save

Är det rätt?

Jag vill att den temporära boken ska stängas utan att sparas men jag vill att min källa ska sparas som en extra åtgärd.

Länk till kommentar
Dela på andra webbplatser

jag skulle nog i sig akta mig för att använda ActiveWorkbook i slutet. ThisWorkbook är säkrare i den mån att det är den bok som anropar koden som då refereras till (tror jag)

 

Paste, bråkar ofta. Bättre att använda PasteSpecial som går att använda vid referenser direkt till cell.

Och kanske att du ska slå alerts igen efter du sparat den första.

Länk till kommentar
Dela på andra webbplatser

Hm, jag gör som du tycker jag borde göra. :rolleyes:

 

En liten sammanfattning:

Jag har ett makro för att kopiera enligt ovan.

Ett annat makro för att klistra in.

Båda ligger i Personal.xlsb (med reservation för filtillägget)

Båda anropas via varsin knapp i verktygsfältet.

 

Jag har ändrat i registret så att jag kan öppna arbetsböcker i egna instanser och jag lägger dessa på varsin skärm.

 

Öppnar Bok-A, kör kopiera-makrot, växlar skärm/bok till Bok-B, kör klistra in makrot, åter till Bok-A, kör makro osv...

Funkar skitbra!

 

Men när jag utför denna procedur kan det hända att jag ser något fel först när jag klistrat in, ex. att bladnamnet (som tas med i kopiera-makrot) är fel.

Jag justerar detta i Bok-A och stegar upp, tillbaka, till den position där jag vill köra kopiera-makrot och kör det. Växlar och klistrar in osv..

 

Det är, eller var, i samband med en sådan manöver som jag (till sist) upptäckte att den nyligen gjorda ändringen i Bok-A inte sparas.

Eller rättare - jag får ingen varning/påminnelse om att spara boken.

 

Antingen behöver jag få det när jag stänger Bok-A och något är ändrat eller så behöver jag se till att boken alltid sparas när jag kör kopiera-makrot.

 

Vad är det denna gör? -> Application.DisplayAlerts = False
 

Denna antar jag innebär att den temporära filen ignoreras? -> wb.Close False
 

Denna har jag lagt till själv -> ActiveWorkbook.Save

Den kan ju ligga längst upp i koden?

Är det bättre då med ThisWorkbook? Vilken är skillnaden? För att få fokus för att kunna klicka på kopiera-makroknappen behöver jag klicka en gång någonstans i fönstret med Bok-A. Vanligen klickar jag två gånger på knappen, första gången flyttar bara fokus, andra gånger påverkas knappen.

 

 

Länk till kommentar
Dela på andra webbplatser

Blir lite osäker på ThisWorkbook, du får testa om det är boken som anropar eller boken koden körs i (Personal.xlsb). Kan du göra med enkel kodrad i Personal:

Debug.Print ThisWorkbook.Name

exempelvis.

Brukar inte anropa mellan böcker själv.

 

Application.DisplayAlerts = False

trycker undan varningar som den du får om du försöker stänga en bok utan spara.

Kör

 

Application.DisplayAlerts = True

efter att du stängt temp-boken utan att spara.

 

Det där med ActiveWorkbook, ActiveSheet, ActiveCell. De bör undvikas om man kan men ibland fungerar de bra.

Om de inte kan undvikas brukar jag så tidigt se till att skapa en fast referens till boken, bladet, cellen jag senare vill adressera.

typ

Dim myWb as Workbook

Set myWb = ActiveWorkbook.

 

Fördelen med ThisWorkbook är att det alltid är samma. ActiveWorkbook, alla Active-satser, kan ge oberäkneliga svar.

Länk till kommentar
Dela på andra webbplatser

Okej, testade först med detta (i slutet):

Application.DisplayAlerts = False
    wb.Close False
    Application.DisplayAlerts = True
    ' ThisWorkbook.Save

Och då stängs den temporära boken som den ska och jag får varning om att Bok-A bör sparas. = OK

 

Med:

  Application.DisplayAlerts = False
    wb.Close False
    Application.DisplayAlerts = True
    ThisWorkbook.Save

så får jag fortfarande denna varning vilket jag tolkar som att ThisWorkbok avser personal.xlsb, att det är DEN som sparas och inte Bok-A vilket vore önskvärt.

 

Men jag nöjer mig vid att få en påminnelse om att spara, skippar sista raden helt.

Länk till kommentar
Dela på andra webbplatser

Okej, misstänkte nästan det. Thisworkbook pekar på boken som koden körs i.

Mitt tips är då att spara en variabel så fort som möjligt i koden, en som pekar på boken som du startar koden från, om du i slutet vill kunna spara den.
Activeworkbook i slutet av koden, beroende på hur koden ser ut givetvis, kan vara en annan än den i början.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...