Dobrý den, potřebuji pomoci. Asi před 2 roky nám student v naší firmě udělal prográmek za pomocí Visual Basic 2010 Express. Vyplňujeme různé comboboxy a ty se pak kopírují do různých excelovských tabulek po stisknutí tlačítka. Problém nastal při přechodu z excelu 2007 na excel 2013. Program nejen kopíruje, ale také načítá data z tabulek a při načítání i kopírování se program velice zpomalil a také se nyní každý otevíraný ecelovský soubor zobrazí fyzicky na obrazovce. Před tím se soubor otevřel pouze v paměti PC, takže byl vidět pouze skrze TaskManager. Může mi někdo poradit, kde může být problém, když doposud vše fungovalo a nic se neměnilo. Přikládám pro informaci jak je napsané otevření souboru. Mohu přidat i zavírání. Děkuji za pomoc Tímto volám proceduru otevři soubor otevri_soubor(ad_nastav, True, False, heslo_1_r, heslo_1_w) 'ad_nastav = cesta k souboru „nastaveni.xlsx“ stejným způsobem se volají i další soubory. Zde je procedura otevři soubor Public Sub otevri_soubor(ByVal cesta As String, ByVal read As Boolean, ByVal edit As Boolean, ByVal heslo_R As String, ByVal heslo_W As String) Dim a As Boolean fs = CreateObject("Scripting.FileSystemObject") a = fs.fileexists(cesta) If a = False Then MsgBox("Zkontrolujte prosím cestu k souboru " & cesta) : Exit Sub If soubor_otevren = 0 Then Promenne.xlApp = New Excel.Application _ : Promenne.xlWorkBook = xlApp.Workbooks.Open(cesta, ReadOnly:=read, Editable:=edit, WriteResPassword:=heslo_W, Password:=heslo_R, IgnoreReadOnlyRecommended:=edit) _ : soubor_otevren = 1 Else Promenne.xlApp1 = New Excel.Application _ : Promenne.xlWorkBook1 = xlApp1.Workbooks.Open(cesta, ReadOnly:=read, Editable:=edit, WriteResPassword:=heslo_W, Password:=heslo_R, IgnoreReadOnlyRecommended:=edit) : soubor_otevren = 2 End If End Sub 'Globální funkce zavři soubor - uvolni paměť Public Sub zavri_soubor() If soubor_otevren = 1 Then releaseObject(Promenne.xlWorkSheet) xlWorkBook.Close(False) releaseObject(Promenne.xlWorkBook) Promenne.xlApp.Quit() releaseObject(Promenne.xlApp) soubor_otevren = 0 End If If soubor_otevren = 2 Then releaseObject(Promenne.xlWorkSheet1) xlWorkBook1.Close(False) releaseObject(Promenne.xlWorkBook1) Promenne.xlApp1.Quit() releaseObject(Promenne.xlApp1) soubor_otevren = 1 End If End Sub 'Uvolnění paměti po exel objektech Public Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() GC.WaitForPendingFinalizers() End Try End Sub Zde jsou prommene Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Interop.Excel Imports System.Threading #Region "Globální proměnné" Public heslo_ov_r As String = "" Public heslo_ov_w As String = "xxx" Public heslo_1_r As String = "" Public heslo_1_w As String = "xxx" Public heslo_NC_r As String = "" Public heslo_NC_w As String = "xxx" #Region "Globální proměnné pro otevření souboru" Public xlApp As Excel.Application Public xlWorkBook As Excel.Workbook Public xlWorkSheet As Excel.Worksheet Public xlApp1 As Excel.Application Public xlWorkBook1 As Excel.Workbook Public xlWorkSheet1 As Excel.Worksheet
|