Jag har en arbetsbok med en massa blad i med olika namn. Av dessa vill jag ha en funktion som kopierar in bladet i en arbetsbok med samma namn som ett av bladen, samt att bladet ska byta namn, eller kopiera över sitt innehåll i det befintliga bladet. Saknas arbetsboken med samma namn skall en ny arbetsbok skapas. I den nya arbetsboken skall då även ett annat blad kopieras in.
Arbetsbok innehållandes:
Funktionsblad (Där denna funktion mfl. körs.)
arbblad1
kund1
kund2
kund3 osv.
Av detta vill jag kopiera in/skapa arbetsböcker typ:
sub uppdatera()
For Each Worksheet In ActiveWorkbook.Sheets
'Testalert
MsgBox Worksheet.Name
MsgBox "Kopiera"
ThisWorkbook.Worksheets(Array(Worksheet.Name, "KUND")).Copy
Next Worksheet
Exit Sub
Denna fungerar:
ActiveWorkbook.SaveCopyAs Filename:=Worksheet.Name & ".xls"
Jag har kommit så långt att jag kan se vilka arbetsböcker som redan finns resp. vilka som måste skapas.
Att bara skapa en tom arbetsbok i sig är inget problem, mao återstår överkopierandet av mina blad...
Jag bugar & bockar, ska kika igenom och testa koden.
Den har vissa likheter med den kod jag kommit fram till men jag ser uppenbara förbättringar samt prestandahöjningar.
Sen som sagt kommer nog F1 till användning...
Jag har kommit en bit på väg, vet inte riktigt om det är rätt väg men det snurrar något så när i alla fall.
Jag får verkligen tacka för den kod jag fått.
Problemet som jag har nu är att när jag kopierar mina blad från min mall så blir det en massa länkar till den "gamla" sidan.
Vet inte riktigt om raden:
Annars tänkte jag mig att kanske att man kunde skriva om XL-Dennis sub Ta_Bort_Externa_Länkar() så att den endast "klipper bort" filnamnet ur länken, det mellan [ och ].
Hur kan det göras tro?
Vidare, sista grejen nu, kan jag i detta script sätta referenser (typ i verktygsmenyn) mha VBA-kod?
Då du har valt att ställa frågan såväl här på wF som på IDG:s E-forum vill jag be dig i all vänlighet att även låta tråden på E-forumet leva vidare parallellt med tråden här.
Jag kompletterar tråden där med mina svar här.
Lägga till kommando i verktygsmenyn:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
CommandBars(1).FindControl(ID:=30007).Controls("Önskad titel").Delete
End Sub
Private Sub Workbook_Open()
Dim cbVerktyg As CommandBar
Dim cbKnapp As CommandBarButton
Set cbVerktyg = CommandBars(1).FindControl(ID:=30007)
Call Ta_Bort
If cbVerktyg Is Nothing Then
MsgBox "Verktygsmenyn saknas - Kan ej skapa alternativet.", vbCritical
Exit Sub
Else
Set cbKnapp = cbVerktyg.Controls.Add(Type:=msoControlButton)
With cbKnapp
.Caption = "Önskad titel"
.FaceId = "önskad knappbild"
.OnAction = "Ditt makro"
.BeginGroup = True
End With
End If
End Sub
Sub Ta_Bort()
On Error Resume Next
CommandBars(1).FindControl(ID:=30007).Controls("Önskad titel").Delete
End Sub
Sub Ta_Bort_Blad()
Dim wbBok As Workbook
Dim wsBlad As Worksheet
Set wbBok = ThisWorkbook
Set wsBlad = wbBok.Worksheets("Blad1")
Application.DisplayAlerts = False
wsBlad.Delete
Application.DisplayAlerts = True
End Sub
Så här fick det bli. (Sen blir det väl modifieringar under resans gång - som alltid.)
Jag använder mig nu av en liten "mallfil" när jag bygger nya filer, det verkar vara den bästa lösningen.
Det största problemet jag tycker mig ha med Excel är alla dessa länkningar som följer med kors och tvärs och emmellanåt bryts (="phantom link")
Tycker det borde finnas, (eller att jag borde veta) hur man LÄTT ser vilka celler som har referenser och länkar utanför det egna bladet.
-jo det går att se med hjälp av kod, men det borde gå (gör?) att se ändå....
Hur som helst ville jag egentligen bara visa hur det hela blev: