Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 10:19:40 - Alf Zell, i forum microsoft office, Tråden har 9 Kommentarer och lästs av 2101 personer

Hej kör följande testkod för att skapa flera excelfiler men får fel på andra varvet, Varför ??

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 Sub


Svara

Sv: VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 11:19:13 - Åsa Holmgren

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:

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.


Svara

Sv: VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 11:56:51 - Alf Zell

Tack för ditt svar
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 ?


Svara

Sv:VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 13:26:46 - Åsa Holmgren

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 ;)

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.


Svara

Sv: VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 13:53:13 - Alf Zell

Tack för ditt uttömmande svar.
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 ?


Svara

Sv:VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 13:58:55 - Åsa Holmgren

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.

<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>


Svara

Sv: VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 14:10:03 - Alf Zell

Ok
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 .........."


Svara

Sv:VBA och Excel, Vad gör jag för fel ?

Postades av 2007-02-08 14:25:21 - Åsa Holmgren

Du har inte möjlighet att använda Excel-funktionen för delsumma (Data-Delsummor...)?


Svara

Sv: VBA och Excel, Vad gör jag för fel ?

Postades av 2007-04-12 15:46:39 - Mikael Åberg

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:

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


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 738
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies