12. december 2002 - 05:13Der er
15 kommentarer og 2 løsninger
Excel Hjælp søges i VB
Hej Hej. Jeg har problemmer med at få excel væk fra proccesliste nå jeg gemmer mit arbejde. Mit Program skal oprette et antal Ark. og sætte data ind i diverse Ark. Det kører fint. Men nå jeg så har lukket excel med følgende kode.
Workbook.Close True ExApp.Visible = False ExApp.Quit Set Workbook = Nothing Set Worksheets = Nothing Set ExApp = Nothing
Kan jeg se at Excel stadig ligger i Procceslisten. Hvad gør jeg forkert.
Det jeg gør er ***** 1. Åben nyt regneark **** Dim myEx As Object Set ExApp = CreateObject("Excel.Application") Set Workbook = ExApp.Workbooks.Add() Set Worksheets = Workbook.ActiveSheet
***** 2. Giver Ark1 Navn "Alle" ***** Worksheets.Select Worksheets.Name = "Alle"
***** 3. Tilføjer nyt Ark og giver det Navn Nr_1 **** i = Total Do While i > 0 Sheets.Add Sheets(2).Select Sheets(2).Name = "Nr_" & i i = i - 1 Loop
***** 4. Gemmer Regneark ******* Workbook.Close True ExApp.Visible = False ExApp.Quit Set Workbook = Nothing Set Worksheets = Nothing Set ExApp = Nothing
Tror faktisk ikke du kan komme uden om det på nogen måde..... Jeg kører med OutLook som mail program, og det bruger Word som email editor.....Hvis jeg afslutter OutLook så er den process der hedder WINWORD.EXE stadig kørende......
Og jeg har ikke word kørende eller har haft......
Jeg er som sagt ikke sikker, men hvis man kunne vil jeg tro microsoft havde lavet det......
http://www.ilook.fsnet.co.uk/vb/vbproc.htm <-- der er noget om det med at dræbe en process....den skulle også chekke om den kører før den prøver, du kan downloade projektet.....
Har ingen ide om det, kom bare med et alternativt forslag :O)
Synes godt om
Slettet bruger
12. december 2002 - 08:54#7
Du kan prøve med denne kodestump der checker om Excel stadigvæk kører.
-------------- Dim xlApp as Object On Error Resume Next 'First try to hook your variable to a running instance of Excel Set xlApp = GetObject(, "Excel.Application") If Err.Number = 429 Then 'This error means that GetObject failed and Excel isn't running. MsgBox "Excel isn't running." Else 'No error means that Excel is indeed running. MsgBox "Excel is running." xlApp.Quit End If
Set xlApp = Nothing ----------------------------------
Well, I only answer the hard ones now and this one had me stumped for a good 15 minutes. Here is my best guess, not tested, but sound theory.
Your missing the dot before the Sheets.Add method.
Since you had already set a reference to Excel, then typing in "sheets.add" resolves to "Sheets.Add", and you didn't notice the missing dot. VB, seeing "Sheets.Add", opens a second instance of Excel, and the Quit method just quit the first instance. So, is it possible that Workbook.Sheets.Add will work??? Det ved jeg ikke...Prøve det.
Nu er jeg jo ikke helt sikker på hvad / hvordan resultatet skal være, men flere steder mangler du at referere til din workbook. Test lige denne her model:
Option Compare Database Option Explicit
Dim exApp As Excel.Application Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim i Dim x Dim y
Private Sub Command1_Click() Set exApp = New Excel.Application Set Wb = exApp.Workbooks.Add Set Ws = Wb.Sheets("Ark1") exApp.Visible = True Ws.Name = "All"
With Ws .Cells(1, 1) = "Timestamp" .Cells(1, 2) = "Turbine" .Cells(1, 3) = "TimestampTurbine" .Cells(1, 4) = "Status" .Cells(1, 5) = "TimeOk" .Cells(1, 6) = "TimeErr" .Range("A1:F1").Select End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .ShrinkToFit = False .MergeCells = False End With With Selection.Font .Name = "Arial" .FontStyle = "fed" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With For i = 1 To 2 Wb.Sheets(i + 1).Select Wb.Sheets(i + 1).Copy After:=Sheets(i + 1) Wb.Sheets(i + 1).Name = "Turb_" & i Wb.Sheets(i + 1).Select Wb.Sheets(i + 1).Activate Next Wb.Sheets(1).Range("A1:F1").Copy For i = 1 To 2 Wb.Sheets(i + 1).Paste 'Range("A1").Paste Wb.Sheets(i + 1).Columns("A:F").EntireColumn.AutoFit Next x = 2 'For y = 1 To TotalTurbine For y = 1 To 2 For i = 1 To 10 Ws.Cells(i + 1, 1) = "Test" Ws.Cells(i + 1, 2) = y Next Wb.Sheets(1).Activate Next Wb.Close True exApp.Visible = False exApp.Quit Set Wb = Nothing Set Ws = Nothing Set exApp = Nothing End Sub
Nej det er stadig galt. Hvis du sætter dit break flag ud for End Sub. og Trykker Ctrl Alt Del Så ligger Excel.exe i Processer vinduet. Og den skal væk. For at jeg kan udføre knappen en gang til
Synes godt om
Slettet bruger
12. december 2002 - 22:54#14
Det er en smule forvirrende at du har variable der hedder workbook og Worksheets, da der er objekter i Excel/VBA der hedder nøjagtig det samme. ----------------------------- Dim workBook As Excel.workBook Dim Worksheets As Excel.Worksheet -----------------------------
I er alle sammen i gang med at "beat this horse to death".
Midcom>> Det er bare hvad jeg har sagt og [bak] "måske" skrivet i hans kode forslag...Du har 2 instances af Excel åben. Hvis man ikke refer til objekter som eksister...VB vil åben en anden "instance". Det er ikke en nemt vej her, man skal bare kig i gennem din kode og finde hvor (hint: change all your Sheets to WorkBook.Sheets)
You were on the right track... Kommentar: midcom 12/12-2002 05:36:47 Det er højst sandsyndligt fordi jeg bruger " Sheets " komando
...Don't let these guys pull you the wrong way (except for blackadders forslag om at vælg variable navn som er mer politisk "rigtig")
Option Explicit Dim exApp As Excel.Application Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim i Dim x Dim y Private Sub Command1_Click() Set exApp = New Excel.Application Set Wb = exApp.Workbooks.Add Set Ws = Wb.Sheets(1) exApp.Visible = True Ws.Name = "All" With Wb.Sheets(1) .Cells(1, 1) = "Timestamp" .Cells(1, 2) = "Turbine" .Cells(1, 3) = "TimestampTurbine" .Cells(1, 4) = "Status" .Cells(1, 5) = "TimeOk" .Cells(1, 6) = "TimeErr" End With With Ws.Range("A1:F1") .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .ShrinkToFit = False .MergeCells = False .Font.Bold = True .Columns("C:C").EntireColumn.AutoFit End With Set Ws = Nothing For i = 1 To 2 Wb.Sheets(i).Select Wb.Sheets(i).Copy After:=Wb.Sheets(i) '' Her manglede der Wb. efter = Wb.Sheets(i + 1).Name = "Turb_" & i Wb.Sheets(i + 1).Select Wb.Sheets(i + 1).Activate Next Set Ws = Wb.Sheets(1) Wb.Close True exApp.Visible = False exApp.Quit Set Wb = Nothing Set Ws = Nothing Set exApp = Nothing End Sub
Plus diverse tilretning Men tak for hjælpen Point deles lige over
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.