Hej kör följande testkod för att skapa flera excelfiler men får fel på andra varvet, Varför ?? Jag kan inte riktigt förklara varför det fungerar första gången, men andra gången verkar koden inte koppla att Range-metoden hör till Excel. Du bör använda objekten mera på det här viset: Tack för ditt svar Att spela in makron i Excel är ett bra sätt att börja lära sig VBA, däremot blir det inte speciellt effektiv och snygg kod. Sedan är det naturligtvis upp till dig att bestämma hur effektiv och snygg den behöver vara ;) Tack för ditt uttömmande svar. Jag brukar försöka säkerställa att Excel avslutas med hjälp av felhantering. Om all hantering ska ske dold för användarna finns det ingen anledning att återanvända Excel-instanser. Ok Du har inte möjlighet att använda Excel-funktionen för delsumma (Data-Delsummor...)? Här kommer en VBA-lösning som bör fungera för dig. För att vara säker har jag testkört koden och hos mig fungerar den:) Principen är att du går "bakvägen" och löser detta i två steg: VBA och Excel, Vad gör jag för fel ?
Private Sub Test()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Long
Dim j As Integer
For j = 1 To 3
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add
With xlBook.ActiveSheet
Range("A1:C1").Select
Selection.Font.Bold = True
Columns("A").Select
Selection.NumberFormat = "@"
Selection.HorizontalAlignment = xlLeft
Columns("A:A").ColumnWidth = 15
Columns("B:B").ColumnWidth = 15
Columns("C:C").ColumnWidth = 15
Columns("B:C").Select
Selection.NumberFormat = "#,##0.00"
Selection.HorizontalAlignment = xlRight
For i = 1 To 3
.Cells(1, i).Value = i
Next i
Range("A1").Select
End With
xlSheet.SaveAs App.Path & "\Test" & j & ".xls"
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Next j
End SubSv: VBA och Excel, Vad gör jag för fel ?
Private Sub Test()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Long
Dim j As Integer
Set xlApp = New Excel.Application
For j = 1 To 3
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Sheets(1)
With xlSheet
.Range("A1:C1").Font.Bold = True
With .Range("A:A")
.NumberFormat = "@"
.HorizontalAlignment = xlLeft
End With
With .Range("B:C")
.NumberFormat = "#,##0.00"
.HorizontalAlignment = xlRight
End With
.Range("A:C").ColumnWidth = 15
For i = 1 To 3
.Cells(1, i).Value = i
Next i
End With
xlBook.SaveAs App.Path & "Text" & j & ".xls"
xlBook.Close
Set xlSheet = Nothing
Set xlBook = Nothing
Next j
xlApp.Quit
Set xlApp = Nothing
End Sub
Som du ser har jag petat på lite andra saker också:
- "Selection" är inte så snyggt att använda, använd "Range" istället.
- Det finns ingen anledning att avsluta Excel mellan varje arbetsbok som ska skapas, det tar bara tid.
- Eftersom varje ny arbetsbok har tre blad från början valde jag att arbeta med det första av dem istället för att lägga till ett nytt.
- Det är arbetsboken som ska sparas, inte bladet.
Sv: VBA och Excel, Vad gör jag för fel ?
Eftersom jag är helt novis då det gäller VBA och Excel så fick jag igår ett gott råd för att förstå
koden bättre och det var att helt enkelt skapa ett makro i excel och sedan kopiera den av excel skpade koden till min VB kod. Eftersom den koden innehöll selection så antog jag att det var det mest korrekta.
Angående att avsluta excel efter varje varv beror på att denna kod bara är en förkortning av en större
rutin men för att visa felet så minskade jag ner den.
Det är inte säkert att excel filen skall skapas mer än en gång, det beror på andra faktorer i programmet jag bygger, så jag är tvungen att avsluta den. Har du något bättre förslag ? Sv:VBA och Excel, Vad gör jag för fel ?
När man spelar in makron i Excel och t.ex. får raden:
Range("A1:C1")
så har du egentligen fått:
Application.Range("A1:C1")
Det är bara det att "top-objektet" Application inte visas i VBA-koden.
När du arbetar med Excel m.hj.a. COM behöver du ange att "Range" är en metod för "Application-objektet". Om du lägger till xlApp framför de "herrelösa" metoderna i din kod så kommer den att fungera (även om den fortfarande inte är särskilt snygg...).
xlApp.Range("A1:C1").Select
xlApp.Selection.Font.Bold = True
xlApp.Columns("A").Select
xlApp.Selection.NumberFormat = "@"
Vad gäller att starta och avsluta Excel så kan det under de förutsättningar du nämner vara befogat att avsluta Excel efter varje dokument. Det är viktigt att Excel verkligen blir avslutat och att objektvariabeln blir satt till Nothing för att inte osynliga Excel-instanser ska bli kvarlämnade.
Sv: VBA och Excel, Vad gör jag för fel ?
Det hjälper mig på rätts pår från början och givetvis vill jag koda som du säger på det mest korrekta sättet
Ytterligare en fråga om du har tid.
Om jag får ett stopp i koden och därmed är en instans av excel skapad utan att vara stängd
Hur kontrollera detta innan man startar ännu en och om det finns hur avsluta den.
Skall jag använda befintlig el avsluta den och starta en ny ?
Sv:VBA och Excel, Vad gör jag för fel ?
<code>
Sub Test()
Dim xlApp As Excel.Application
On Error Goto Test_Err
Set xlApp = New Excel.Application
' do stuff
Test_End:
xlApp.Quit
Set xlApp = Nothing
Exit Sub
Test_Err:
MsgBox "Ett fel uppstod..."
Goto Test_End
End Sub
</code>Sv: VBA och Excel, Vad gör jag för fel ?
Har du någon lösning på hur jag skall summera en väldigt massa deltotaler till en sluttotal
Som jag har gjort nu är att jag sparat att deltotaler och sedan adderat dessa till en slutsumma
Problemet är att tydligen blev strängen för lång så jag fick stopp i koden.
Ex
.Range("E20").Formula = "=(" & BeloppTotal & ")"
Strängen belopptotal blir för lång.
"E4+39+E12+E17+E22+E26+E30+osv .........." Sv:VBA och Excel, Vad gör jag för fel ?
Sv: VBA och Excel, Vad gör jag för fel ?
Steg1 - Skapa först arken i Excel, med en viss formatering som du ville ha.
Steg2 - Spara sedan varje ark, som en egen Excel-arbetsbok.
Kopiera och klistra in nedanstående VBA-kod i en Modul i Excel. Därefter, kör först Makrot "SkapaArk", sedan kör du Makrot "NyaAbetsböcker". Du bör nu fått 5 separata arbetsböcker utifrån 5 ark!..(Okey, du kan ha fått 8 arbetsböcker då, om du låter de 3 arken vara kvar förstås...:)
Sub SkapaArk()
'Skapa 5 ark i Excel...
For counter = 1 To 5
Worksheets.Add Before:=Sheets(1)
'Varje ark skall ha en viss formatering...
Range("A1:C1").Select
Selection.Font.Bold = True
Columns("A").Select
Selection.NumberFormat = "@"
Selection.HorizontalAlignment = xlLeft
Columns("A:A").ColumnWidth = 15
Columns("B:B").ColumnWidth = 15
Columns("C:C").ColumnWidth = 15
Columns("B:C").Select
Selection.NumberFormat = "#,##0.00"
Selection.HorizontalAlignment = xlRight
'Gör detta nu 5 gånger, tack...
Next counter
End Sub
Sub NyaArbetsböcker()
'Spara dessa 5 ark som 5 separata Excelarbetsböcker
Dim Arbetsbok As Worksheet
For Each Arbetsbok In ThisWorkbook.Worksheets
Arbetsbok.Copy
Next Arbetsbok
End Sub