Avatar billede midcom Nybegynder
12. december 2002 - 05:13 Der 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

Hvis i kan hjælpe mig
Avatar billede tubber Juniormester
12. december 2002 - 05:31 #1
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......

/Tubber
Avatar billede tubber Juniormester
12. december 2002 - 05:33 #2
Der er selvfølgelig den mulighed at man måske kan dræbe processen bagefter med noget kode.....

Ser lige på det

/Tubber
Avatar billede midcom Nybegynder
12. december 2002 - 05:35 #3
Hej Tubber.
Den forsvinder godt nok nå jeg ikke opretter flere ark. men kun omdøber Ark
Avatar billede tubber Juniormester
12. december 2002 - 05:36 #4
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.....
Avatar billede midcom Nybegynder
12. december 2002 - 05:36 #5
Det er højst sandsyndligt fordi jeg bruger " Sheets " komando
Avatar billede tubber Juniormester
12. december 2002 - 05:39 #6
Har ingen ide om det, kom bare med et alternativt forslag :O)
Avatar billede 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
----------------------------------
Avatar billede amerikaner Nybegynder
12. december 2002 - 11:43 #8
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.
Avatar billede midcom Nybegynder
12. december 2002 - 14:41 #9
Hej Igen
Vil prøve iaften kl 00.00
Avatar billede Slettet bruger
12. december 2002 - 15:01 #10
Har du mulighed for at poste koden i sin helhed ?
evt. forklare kort om hvad du prøver at lave.
Avatar billede midcom Nybegynder
12. december 2002 - 20:31 #11
Her er et eksembel.Opret et tomt Form. Med en knap på

Option Explicit
Dim exApp As Excel.Application
Dim workBook As Excel.workBook
Dim Worksheets As Excel.Worksheet
Dim i
Dim x
Dim y

Private Sub Command1_Click()
Set exApp = New Excel.Application
Set workBook = exApp.Workbooks.Add
Set Worksheets = workBook.ActiveSheet
exApp.Visible = True
Sheets("Ark1").Select
Sheets("Ark1").Name = "All"
Worksheets.Cells(1, 1) = "Timestamp"
Worksheets.Cells(1, 2) = "Turbine"
Worksheets.Cells(1, 3) = "TimestampTurbine"
Worksheets.Cells(1, 4) = "Status"
Worksheets.Cells(1, 5) = "TimeOk"
Worksheets.Cells(1, 6) = "TimeErr"
Range("A1:F1").Select
    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
    Sheets(i + 1).Select
    Sheets(i + 1).Copy After:=Sheets(i + 1)
    Sheets(i + 1).Name = "Turb_" & i
    Sheets(i + 1).Select
    Sheets(i + 1).Activate
Next
    Sheets(1).Activate
    Range("A1:F1").Select
    Selection.Copy
For i = 1 To 2
    Sheets(i + 1).Select
    Sheets(i + 1).Activate
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    Columns("A:F").EntireColumn.AutoFit
Next
x = 2
'For y = 1 To TotalTurbine
For y = 1 To 2
        For i = 1 To 10
            Worksheets.Cells(i + 1, 1) = "Test"
            Worksheets.Cells(i + 1, 2) = y
        Next
        Sheets(1).Select
        Sheets(1).Activate
        Range("A1").Select
Next
workBook.Close True
exApp.Visible = False
exApp.Quit
Set workBook = Nothing
Set Worksheets = Nothing
Set exApp = Nothing
End Sub
Avatar billede bak Forsker
12. december 2002 - 22:18 #12
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
Avatar billede midcom Nybegynder
12. december 2002 - 22:51 #13
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
Avatar billede 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
-----------------------------

Gør hellere som bak foreslår og brug 'Wb' og 'Ws'
Avatar billede amerikaner Nybegynder
12. december 2002 - 23:05 #15
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")
Avatar billede amerikaner Nybegynder
12. december 2002 - 23:06 #16
Undsklyd den blanding, (et par måned her i Danmark). Dansk er nemt at taler men ikke så nemt at skriver, jeg skifter en gang i mellem.
Avatar billede midcom Nybegynder
13. december 2002 - 01:00 #17
Her er løsningen

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester