miXer Skrevet 29. januar 2008 Del Skrevet 29. januar 2008 (endret) Heisann. Jeg har klart å få til å skrive to verdier til et nytt excel dokument, men lurer på hvordan jeg kan åpne et eksisterende excel dokument å skrive de samme verdiene til dokumentet. Hvordan gjør jeg dette? Dette er koden jeg bruker nå: 'Start Excel oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add 'Sette inn verdier i Excel oSheet = oBook.Worksheets(1) oSheet.Range("B1").Value = My.Computer.FileSystem.ReadAllText(Dir & PCFil) oSheet.Range("B2").Value = My.Computer.FileSystem.ReadAllText(Dir & ADFil) oExcel.Visible = True oExcel.UserControl = True Endret 29. januar 2008 av miXer Lenke til kommentar
miXer Skrevet 29. januar 2008 Forfatter Del Skrevet 29. januar 2008 Jeg fant det ut selv. Med denne koden: 'Start Excel oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Open(Dir & excelbok) 'Sette inn verdier i Excel oSheet = oBook.Worksheets(1) oSheet.Range("B1").Value = My.Computer.FileSystem.ReadAllText(Dir & PCFil) oSheet.Range("B2").Value = My.Computer.FileSystem.ReadAllText(Dir & ADFil) oBook.SaveAs(Environment.GetEnvironmentVariable("temp") & "\" & excelbok) oExcel.Visible = True oExcel.UserControl = True Lenke til kommentar
miXer Skrevet 29. januar 2008 Forfatter Del Skrevet 29. januar 2008 Et nytt spørsmål angående dette. Jeg har en knapp på min form som åpner et eksisterende excel dokument og henter inn tekst fra to .txt filer og setter inn i celle B1 og B2. Når jeg nå lukker excel programmet, selvom jeg har lagret eller ikke så stenger ikke prosessen seg i Task Manager. Prosessen blir borte når jeg stenger programmet mitt. Noen som vet hvorfor? Her er koden: 'Start Excel oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Open(Dir & excelbok) 'Sette inn verdier i Excel oSheet = oBook.Worksheets(1) oSheet.Range("B1").Value = My.Computer.FileSystem.ReadAllText(Dir & PCFil) oSheet.Range("B2").Value = My.Computer.FileSystem.ReadAllText(Dir & ADFil) oExcel.Visible = True oExcel.UserControl = True Lenke til kommentar
Harald Staff Skrevet 29. januar 2008 Del Skrevet 29. januar 2008 Sånne objekter terminerer ikke uten videre bare fordi koden er ferdig med dem. Du skriver antakelig .net, det er ikke min dialekt, i klassisk VB må du skrive noe a la oExcel.Quit DoEvents Set oExcel = Nothing (.net er uten Set ? mener det) OG du må forvisse om at det faktisk skjer, at ikke Excel står og spør om noe (Save Changes ? og desslike). Dette i motsetning til f.eks. Access, som dauer i det sekund du slutter å tenke på ham. Go figure. HTH. Beste hilsen Harald Lenke til kommentar
miXer Skrevet 29. januar 2008 Forfatter Del Skrevet 29. januar 2008 Det er .NET. Jeg vet at jeg må ha med Excel.Quit() dersom jeg skal lukke fila etter at verdiene er sendt til den. Men poenget her er at programmet skriver verdiene til excel arket og lar brukeren ha kontroll over excel programmet og lukker det når brukeren er ferdig. Kan jeg da få koda det slik at excel prosessen stenger seg når brukeren stenger excel? Lenke til kommentar
Harald Staff Skrevet 29. januar 2008 Del Skrevet 29. januar 2008 Ah ok skjønner. Eller rettere ikke, programmet ditt burde ikke holde prosessen lenger enn brukeren. Men du bør uansett slippe taket, frigjøre variablene. Heter det oExcel = Nothing eller noe sånt ? Prøv, alle variabler som binder. Lenke til kommentar
miXer Skrevet 30. januar 2008 Forfatter Del Skrevet 30. januar 2008 Har nå prøvd å sette: oExcel = Nothing oBook = Nothing oSheet = Nothing og de slapp variablene, men når brukeren lukker excel, så blir fortsatt ikke EXCEL.EXE borte fra prosess lista. Andre forslag? Lenke til kommentar
Harald Staff Skrevet 30. januar 2008 Del Skrevet 30. januar 2008 Du er sikker på at det er samme instans ? Lenke til kommentar
backup Skrevet 30. januar 2008 Del Skrevet 30. januar 2008 Denne kodesnutten sjekker om EXCEL er i prosessvinduet, og i så fall blir den fjernet, iallfall gjør den det hos meg når jeg kjører som administrator på winXP Pro: Dim sProcesses() As System.Diagnostics.Process Dim sProcess As System.Diagnostics.Process sProcesses = System.Diagnostics.Process.GetProcesses() For Each sProcess In sProcesses If sProcess.ProcessName = "EXCEL" Then sProcess.Kill() Next Lenke til kommentar
miXer Skrevet 30. januar 2008 Forfatter Del Skrevet 30. januar 2008 Denne kodesnutten sjekker om EXCEL er i prosessvinduet, og i så fall blir den fjernet, iallfall gjør den det hos meg når jeg kjører som administrator på winXP Pro: Dim sProcesses() As System.Diagnostics.Process Dim sProcess As System.Diagnostics.Process sProcesses = System.Diagnostics.Process.GetProcesses() For Each sProcess In sProcesses If sProcess.ProcessName = "EXCEL" Then sProcess.Kill() Next Tusen takk. Nå blir prosessen borte. Men poenget her er at prosessen og programmet skal bli borte når brukeren klikker på avslutt, ikke når programmet er ferdig med det den skal gjøre. Er dette mulig? Kan programmet sjekke når brukeren lukker excel og da kille prosessen? Lenke til kommentar
miXer Skrevet 1. februar 2008 Forfatter Del Skrevet 1. februar 2008 Fant ut av dette selv. Ved å bruke: oExcel = Nothing oBook = Nothing oSheet = Nothing End så slipper den alle variablene som programmet bruker, noe som i seg selv ikke gjorde at excel forsvant fra prosess lista, men når jeg la på End på slutten, så gav den full kontroll til bruker, og Excel ble borte fra lista når bruker lukte Excel! Lenke til kommentar
Harald Staff Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Bra. Og takk for info og oppfølging. Men det betyr at du må terminere programmet ditt for å oppnå dette altså. Synd og skam og ganske merkelig og Lenke til kommentar
miXer Skrevet 2. februar 2008 Forfatter Del Skrevet 2. februar 2008 Så langt har jeg ikke funnet noen bedre måte å gjøre det på nei. Dere må bare rope ut dersom noen har en bedre måte å gjøre det på.. Tas i mot med takk! Lenke til kommentar
miXer Skrevet 7. februar 2008 Forfatter Del Skrevet 7. februar 2008 Da har jeg funnet en løsning som stenger excel programmet som er blitt åpnet uten at programmet blir lukket. Programmet finner PID'en på excel instansen programmet åpner og killer den instansen av excel etter at programmet er ferdig med instansen og har frigitt alle resursser til instansen. Her er koden: 'Get the PID for excel Dim y As Integer Dim currentprocess As Process = Process.GetCurrentProcess() Dim myExcelPID As Integer 'Make a list of all processes named excel Dim localByName As Process() = Process.GetProcessesByName("excel") For y = 0 To localByName.GetUpperBound(0) myExcelPID = localByName(y).Id Exit For Next 'The code i use to kill excel oExcel.DisplayAlerts = False oBook.SaveAs(Dir & eBook) oSheet = Nothing oBook.Close() oBook = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing Dim aProcesses() As Process = Process.GetProcesses Dim aProcess As Process For y = 0 To aProcesses.GetUpperBound(0) If aProcesses(y).Id = myExcelPID Then aProcess = aProcesses(y) Try aProcess.Kill() Catch ex As Exception End Try Exit For End If Next GC.Collect() Process.Start(eBook) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå