Bjourklund Postad 23 juni, 2015 Share Postad 23 juni, 2015 Hej. Är helt ny inom området makro och har kört fast med en grej så hoppas någon har något bra tips. Jag har skapat ett Excelark som jag ska använda som mall i fortsättningen. I arket har jag gjort en summering med en massa kostander osv. På summeringssidan har jag skapat en knapp som jag kopplat ett makro till, som fungerar på följande sätt: Om jag markerar en viss cell på summeringssidan och sedan trycker på knappen jag skapat så öppnas en nytt blad som får namnet med den markerade cellens innehåll, tex på summeringssidan finns en cell som heter BCB.1, om jag står i den cellen och trycker på knappen så öppnas en ny sida som heter BCB.1 För varje ny sida som skapas infogas även en tabell som jag har lyckats koda. Detta fungerar precis som det ska. Nu till problemet. Det jag vill nu ska hända är att. När man skapar en ny sida via knappen, vill jag även att viss data från summeringssidan ska kopieras och klistras in i den ny sidan som skapas på en bestämd plats. Det är inte samma data som ska kopieras från summeringssidan hela tiden, utan tex. cell B:7 och C:8 ska kopieras från summertingssidan och klistras in i sida BCB.1, och cell B:10 och D14 för en annan sida jag skapar. Får inte till koderna rätt. Har prövat med att spela in makron där jag kopierar visa celler och klistrar in sedan men utan att få det att fungera så som jag vill. Hoppas ni förstår mitt problem och ni kan hjälpa mig, håller på att bli tokig! Länk till kommentar Dela på andra webbplatser More sharing options...
Tune Postad 23 juni, 2015 Share Postad 23 juni, 2015 Hur ska excel få reda på vilka celler som ska kopieras till det nya bladet? Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 24 juni, 2015 Trådskapare Share Postad 24 juni, 2015 Hur ska excel få reda på vilka celler som ska kopieras till det nya bladet? Man skriver såklar in i formlerna vilka celler som ska väljas! Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 24 juni, 2015 Share Postad 24 juni, 2015 Undrar vad du gör egentligen, samma data på flera blad är ett bra upplägg för att skapa inkonsistenta data, det data som ska vara lika varierar genom boken. Normalt mår Excel bäst av att hanteras som en databas, men tabeller och rapporter. Data i tabeller och rapporten som hämtar data från tabellerna, sammanställer det. Inge kopierar. Men men till det du frågar om. För att VBA ska "veta" vilka celler som ska kopieras, och vart, måste det finnas regler för det. Som exempelvis: Om det finns data i A2, sök sista rad med data neråt, kopiera data från A2 till sista rad, x antal kolumner till blad y, cell A1... Alternativt kod som frågar dig vad som ska kopieras men då kan du lika gärna använda Ctrl-c + Ctrl-v. Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 24 juni, 2015 Trådskapare Share Postad 24 juni, 2015 Jag skickar med dem koder jag har använt mig av så kanske du ser vad jag har gjort. Jag har skrivit in följande kod: Sub Nyflik() Application.ScreenUpdating = False Dim a As String a = ActiveCell.Value Sheets.Add.After:=Sheets(Sheets.Count) ActiveSheet.Name = a 'Här vill jag ha in den koden som gör att jag kopierar vissa celler från första sidan till dem nya flikarna jag skapar 'Lägger alla flikar i alfabetisk ordning intAntalBlad = ActiveWorkbook.Worksheets.Count For i = 1 To intAntalBlad For j = i To intAntalBlad If LCase(Worksheets(j).Name) <LCase(Worksheets(i).Name) Then Worksheets(j).Move After:=Worksheets(i) End If Next j Next i Appliction.ScreenUpdating=False End Sub Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 24 juni, 2015 Share Postad 24 juni, 2015 Säger mig inte vad för celler som ska kopieras. Skicka upp en exempelbok är mitt förslag. Annars att kopiera celler är enkelt, exempelvis Blad1.Range("A1").Value = Blad2.Range("A1").Value eller lite mer komplext Blad1.Range("A1").Resize(blad2.Range("A1").CurrentRegion.Rows.Count, Blad2.Range("A1").Currentregion.Columns.Count)).Value = Blad2.Range("A1").CurrentRegion.Value som kopierar hela sammanhängande området från A1 sett. Eller Blad2.Range("A1").CurrentRegion.Copy Blad1.Range("A1").PasteSpecial Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 25 juni, 2015 Trådskapare Share Postad 25 juni, 2015 Tack för tipsen, men de är inte riktigt så jag vill att det ska funka. Eftersom mina flikar inte heter Blad1 eller Blad2 så blir det ju svårt, dem nya flikarna får ju namnet som den markerade cellen jag har markerat heter, Exempelvis, om jag står i cell A:1 och i den fliken står det CBB.12 så får den nya fliken som skapas namnet CBB.12, är du med mig då? I den specifika fliken som skapas vill jag att vissa celler från sammantällningssidan ska klistras in i den. Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 25 juni, 2015 Share Postad 25 juni, 2015 Flikar kan man adressera på fler sätt. För dig passar nog Worksheets("bladets namn") bättre då du har det namnet. eller att du vid kopieringen låser en referens till bladet du ska kopiera till så slipper du hålla reda på namnet. Sheets.Add.After:=Sheets(Sheets.Count) set ws = Sheets(Sheets.count) ws.name = ... osv. eller With Sheets(Sheets.count) .Name = .. End with Det där är inget problem, problemet är väl att veta vad som ska kopieras? Fast det kanske du kan klura ut hur koden ska se ut nu när du har lite att bygga från? Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 29 juni, 2015 Trådskapare Share Postad 29 juni, 2015 Tack för tipsen. Men eftersom fliken inte finns från början utan den skapas när jag kör makrot, blir det väl svårt att koda det som ska kopieras till exakt plats?? Jag tänker mig någon kod som gör på följande sätt: Det jag vill kopiera klistras in på det senast skapade bladet eller liknande? Går det? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 29 juni, 2015 Share Postad 29 juni, 2015 Nej, du får ju via koden ovan en referens till det nya bladet. Ett nytt blad är ett tomt blad, bara att skriva till det. Som sagt, ladda upp en exempelbok med vad du har och vad du vill ha. Känns som vi står och trampar vatten ärligt talat. Jag vet inte vad du behöver hjälp med och du verkar inte helt veta vad du ska fråga efter heller. Ett exempel löser nog de knutarna. Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 2 juli, 2015 Trådskapare Share Postad 2 juli, 2015 Här kommer ett exempel jag gjort istället för du kanske kan hjälpa mig: För att förtydliga det hela ytterligare så gör du på följande sätt, När du öppnat filen så ställer du dig där det står Stockholm, tryck sedan på knappen "skapa sida", nu ska du fått upp en ny sida där cellerna B3 och C3 har en fet kant runt sig, lägg märke till också att sidan har fått namnet Stockholm. Pröva nu att gå tillbaka till första sidan, ställ dig i rutan Göteborg istället och klicka sedan på knappen "skapa sida" så skapas likadan sida som tidigare där samma celler har en fet kant runt sig, det enda som skiljer nu är att sidan heter Göteborg. Nu till det som jag vill ska hända nu. I varje ny sida som skapas vill jag att värdet för intäkterna och utgifterna ska kopieras och sedan klistras in i i det området på dem nya flikarna som hade en fet kant runt sig. Lägg märke till att det är inte samma värden för Stockholm eller Göteborg så de är inte samma celler som ska kopieras hela tiden. Hur gör man detta? Hoppas det går att lösa. Tack på förhand!'' Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 2 juli, 2015 Trådskapare Share Postad 2 juli, 2015 Hur bifogar man en fil då??????? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 2 juli, 2015 Share Postad 2 juli, 2015 Klicka på "Använd fullständig redigerare". Där kan du bifoga icke makroaktiverade filer. Om med makro, lägg dem först i ett zip-arkiv och ladda upp arkivet. Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 2 juli, 2015 Trådskapare Share Postad 2 juli, 2015 Tack, här kommer det! Exempel.zip Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 2 juli, 2015 Share Postad 2 juli, 2015 Uppdaterar din kod rakt över. Såg ut att vara direktinspelad med massa onödiga select-satser och annat. Kortare, finare nu helt enkelt. Med en rad som sköter kopieringen. Sub Nyflik() Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim rnSource As Range On Error Resume Next Set rnSource = Application.InputBox(prompt:="Markera stad att kopiera", Title:="Cell", Type:=8) On Error GoTo 0 If rnSource Is Nothing Then Exit Sub Dim wsTest As Worksheet On Error Resume Next Set wsTest = Worksheets(rnSource.Value) On Error GoTo 0 If Not wsTest Is Nothing Then MsgBox "Blad med den staden finns redan", vbCritical Exit Sub End If Application.ScreenUpdating = False Set wsSource = ActiveSheet Sheets.Add After:=Sheets(Sheets.Count) Set wsTarget = ActiveSheet wsTarget.Name = rnSource init wsTarget 'Kopierar värde KopieraVärden wsTarget, rnSource SortSheets wsSource.Activate Application.ScreenUpdating = False End Sub Sub KopieraVärden(wsTarget As Worksheet, rnSource As Range) wsTarget.Range("B3:C3").Value = rnSource.Offset(0, 1).Resize(1, 2).Value End Sub Sub SortSheets() 'Lägger alla flikar i alfabetisk ordning intAntalBlad = ActiveWorkbook.Worksheets.Count For i = 1 To intAntalBlad For j = i To intAntalBlad If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then Worksheets(j).Move After:=Worksheets(i) End If Next j Next i End Sub Sub init(ws As Worksheet) 'Lägger till text With ws .Range("B2") = "Intäkter" .Range("C2") = "Utgifter" 'Gör kantlinjer With .Range("B3:C3") .BorderAround Weight:=xlThick .Range("E9:K28").NumberFormat = "#,##0" .Range("F9:G28,I9:I28,K9:K28").NumberFormat = "_-* #,##0 $_-;-* #,##0 $_-;_-* ""-""?? $_-;_-@_-" End With End With End Sub Kopia av Egengjord.zip Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Tusen tackar för hjälpen, det funkar! Jag återkommer om det är något annat jag behöver hjälp med. Tack återigen. Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Det blev ändå lite konstigt ändå. Allting fungerar som jag vill, men nu kopierar den inte rätt celler, mitt exempel ser nämligen inte ut exakt samma. Nu kopierar den celler som hör till respektive stad, om jag istället vill kopiera helt andra celler, alltså att man skriver cellens namn, vart gör jag det? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 3 juli, 2015 Share Postad 3 juli, 2015 ja du, jag kan inte göra mer än jag ser i ditt exempel. Men tre alternativ finns 1: De celler som ska kopieras, ligger de relativt den första position du väljer? Ja cellen du väljer när du väljer stad. 2: Kan Excel söka efter cellerna på något vis? Hitta dem, via nyckelord? 3:Poppar upp en ny dialog där du får välja cellerna. Vi är tillbaka till ruta ett, du har inte berättat vilka celler som ska kopieras, hur koden ska veta att det är just de cellerna! Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Ursäkta om jag är oklar! Men om du kollar på exemplet jag skickade tidigare, så vill jag att cellerna B2 och C6 ska kopieras och klistras in i fliken för Stockholm. Går det? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 3 juli, 2015 Share Postad 3 juli, 2015 Visst går det. Men om staden Göteborg väljs, ska B2 och C6 kopieras även då? Eller är det B3 och C7 som ska kopieras då? Kopiera en cell är enkelt, i min kod, i funktionen KopieraVärden bara att wsTarget.Range("B3") = rnSource.Range("b2") wsTarget.Range("C3") = rnSource.Range("c6") men som sagt, är väl inte alltid cell b2/C6 som ska kopieras? Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Ne precis, du har helt rätt, de är inte alltid samma cell som ska kopieras. Vart klistrar jag in dessa formler? Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 3 juli, 2015 Share Postad 3 juli, 2015 Fortfarande Hur ska Excel veta vilka celler som ska kopieras? finns det ett mönster, finns det något att söka? Om Stockholm väljs då ska... Om Göteborg väljs då ska.. osv. Kanske du måste ställa upp dina data på annat vis? Skicka upp en bild av ditt Excel-ark, en anonymiserad kopia eller liknande. Jag kan inte hjälpa dig mer utan mer data! Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Tack för att du vill hjälpa, förstår om jag är jobbig. Jag skickar istället filen jag arbetar med! Om du trycker på skapa mätspecifikation om trycker på valfri kod som finns ute i vänsterhörnet så skapas en ny sida, precis som det ska, sidan innehåller mall. I den mallen vill jag få med vissa värden för den specifika koden. Så om till exempel skapar en ny mätspecifikation för koden BCB.1 alltså cell A12 så vill jag att cell A12, B12, C12, D12 ,E12 ska klistras in i det nya bladet. Och om du skapar en ny mätspecifikation för Koden BFE.21 alltså cell A15 så vill jag att cell A15, B15, C15, D15, E15 ska klistras in i den fliken. Det är alltså inte samma rad hela tiden som ska kopieras. Jag vill även att cellen B5 från förstasidan ska kopieras in i alla nya blad som skapas? Är du med mig då? Hoppas du kan hjälpa mig. Tack på förhand. Länk till kommentar Dela på andra webbplatser More sharing options...
Bjourklund Postad 3 juli, 2015 Trådskapare Share Postad 3 juli, 2015 Här är filen! Projekt X.zip Länk till kommentar Dela på andra webbplatser More sharing options...
Monshi Postad 3 juli, 2015 Share Postad 3 juli, 2015 Jamen då är varje cell som du ska kopiera på samma rad som den du valt och inom samma avstånd från den du valt. I funktionen KopieraVärden ligger idag wsTarget.Range("B9").Value = rnSource.Offset(0, 1).Resize(1, 2).Value som kopierar cell en kolumn åt höger två celler på samma rad till B9. ja i praktiken bara en cell iochmed att bara en celll får värde. Bara att anpassa denna till wsTarget.Range("A9:E9") = rnSource.Resize(1, 5).Value Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.