PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAVBA Paste xlvaluesVBA Paste xlvalues
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2016-10-14 15:16
 

 Hej

Tacksam för lite hjälp

Hur/kan man skriva om nedan så att inklistringen sker med xlpastvalues?

'Hämtar Stationslittera/AnläggningsID
Workbooks.Open (Filepath & MyFile)
Range("P38").Copy
ActiveWorkbook.Close
erow = Blad1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets("Blad1").Range(Cells(erow, 1), Cells(erow, 7))

 

Mvh
Lars Högberg

Nytt inlägg
 2016-10-15 17:20
 

Worksheets("Blad1").Range(Cells(eRow, 1), Cells(eRow, 7)).PasteSpecial Paste:=xlPasteValues


Men det blir lite kinkigt eftersom du har stängt källfilen innan du klistrar in.


Här är en variant där du låser målområdet redan innan du öppnar filen med anläggningsid och klistrar in innan du stänger den filen:

Dim mål As Range

eRow = Blad1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Set mål = Worksheets("Blad1").Range(Cells(eRow, 1), Cells(eRow, 7))


Workbooks.Open (Filepath & MyFile)
Range("P38").Copy

eRow = Blad1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
mål.PasteSpecial Paste:=xlPasteValues
Workbooks(MyFile).Close
' OBS jag ändrade så att du anger vilken fil som skall stängas, det minskar risken för att du stänger målfilen



För övrigt

Det finns egentligen ingen anledning att använda klipp/klistra om du bara vill skicka vidare ett värde. Tilldela bara MålCellen värdet från KällCellen. Det gör en ENORM skillnad i hastighet om ditt makro skall loopa några tusen gånger.

Dvs ersätt klipp och klistra i din kod med något i stil med:

Worksheets("Blad1").Range(Cells(erow, 1), Cells(erow, 7)).value =Range("P38").value

Återigen blir det svårt för excel att veta vilket blad du egentligen menar (vilken P38?). En variant är att Skapa en variabel som lagrar värdet från P38, typ:

Workbooks.Open (Filepath & MyFile)
TempVariabel = Range("P38").Value
Workbooks(MyFile).Close
eRow = Blad1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Worksheets("Blad1").Range(Cells(eRow, 1), Cells(eRow, 7)).Value = TempVariabel

Men även här bygger det på att du står i rätt blad när du "klistrar in"


En bättre variant är att låsa målområdet redan innan du öppnas källfilen (samma som inklistringen ovan)

Det här skulle vara bättre, fast inte bra.



Sub test()
Dim Filepath As String
Dim MyFile As String
Dim eRow As Integer
Dim rTargetRange As Range

Filepath = "C:\tmp\"
MyFile = "Anläggningsfil.xlsx"

' här borde du även låsa "mål-arbetsboken" eftersom du fortfarande kan hamna i fel flik eller liknande

' Hitta sista tomma i kolumn A
eRow = Blad1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

' Lås målet innan du börjar öppna andra filer, skulle vara ännu bättre om du låst arbetsboken.
Set rTargetRange = Worksheets("Blad1").Range(Cells(eRow, 1), Cells(eRow, 7))

'Hämtar Stationslittera/AnläggningsID
' Återigen, du har inte angett vilken arbetsblad denskall titta i i källdatafilen. Det här fungerar bara om det endast finns en flik eller om om personen som öppnade filen innan dig har lämnat rätt fliken öppen.

Workbooks.Open (Filepath & MyFile)
rTargetRange.Value = Range("P38").Value
Workbooks(MyFile).Close
End Sub



Kort sagt. Försök att ange dina arbetsböcker och arbetsblad ordentligt. Det sparar dig många sorger
Nytt inlägg
 2016-10-18 12:39
 

 Hej igen

Fantastisk, tack för snabbt svar. Fick till det ganska bra då jag är total nybörjare på VBA.

Så det blev mycket trial and error innan klart.

Enda är att skärmen blinkar till för varje post den hämtar, antar att det är filerna som öppnas/stängs.

 

Men återigen stort tack, sparat mig många timmar nu och i framtiden.

Mvh
/Lars

Nytt inlägg
 2016-10-18 13:41
 
Om du vill slippa blinket kan du stänga av skärmuppdateringarna när makrot går och sedan sätta på det igen.

' Dvs stäng av skärmuppdatering med den här koden i början av makrot
Application.ScreenUpdating = False


' och i sätt på den igen sist i makrot
Application.ScreenUpdating = True


http://excelribbon.tips.net/T009151_Turning_Off_Screen_Updating.html
https://msdn.microsoft.com/en-us/library/office/ff193498.aspx

Personligen tycker jag att det är "skrämfladdret" gör det lättare att felsöka när man håller på att skapa makrot, så ScreenUpdating= false petar man inte in förrän man är någorlunda säker på att koden är fungerar som man vill.
Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAVBA Paste xlvaluesVBA Paste xlvalues

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter