Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-soubory » vba-excel-je-soubor-otevren

Je soubor otevřen - VBA Excel

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

jak zjistit zda již není soubor danného jména otevřen?

Úvodem

Pokud chcete pomocí VBA otevřít soubor setjného jména jako již má již otevřený soubor obdržíte chybovou hlášku. Předejít této skutečnosti lze kontrolou zda je soubor otevřen.

Řešení ve VBA

On Error Resume Next Set Sesit = Workbooks("kontrolovany-sesit.xls") sesitOtevren = Not Sesit Is Nothing If sesitOtevren = True Then MsgBox "Sesit je otevren" Else MsgBox "Sesit neni otevren" End If

Poznámka: U souboru jež chceme zkontrolovat se neudáva cesta, jen jeho jméno např. kontrolovany-sesit.xls

Poznámka 2: Soubor musí být otevřen ve stejné aplikaci MS Excelu.

Je soubor otevřen - v novém aplikačním okně

Předchozí skript nefunguje pokud je soubor otevřen v novém aplikačním okně, takže jak na to? Například použít následující kód:

Workbooks("kontrolovany-soubor.xls").Activate If Err = 0 Then MsgBox "sesit otevren" Else MsgBox "sesit neotevren" End If Err.Clear

Inspirace díky Internetu a informaci, že pokud soubor nelze Aktivovat vrátí Err číslo chyby 9. Takže když nejde aktivovat, tak není ani otevřen ...

Článek byl aktualizován: 19.09.2020 11:07

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Laďa

Přidáno: 28.08.14 13:29

Zdravím, mám soubor, který je sdílený, navíc při spuštění probíhá logování uživatele atd.. Funguje to spolehlivě za podmínky, že není spuštěný jiný sešit. Doaz: Jak zajistit přes VBA, aby se při spouštění souboru makro nejdříve "podívalo", jestli uživatel nemá otevřený jiný Excel. Pokud ano, přeruší spouštění a zobrazí hlášku s upozorněním, aby nejdřive zavřel excel. Děkuji

Jojo

Přidáno: 03.09.14 11:00

To Laďa: Pôvodný kód je upravený pre konkrétnu potrebuSub ProcessesRunning() 'Vráti počet (rovnakých) bežiacich procesov 'VBA - Get other excel Application instances 'http://www.mrexcel.com/forum/excel-questions/163344-visual-basic-applications-get-other-excel-application-instances.html Dim objList As Object Dim objProcess As Object Dim strWhat As String strWhat = "Excel.exe" Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & strWhat & "'") If objList.Count > 1 Then MsgBox "Najprv treba zatvoriť bežiaci " & strWhat & vbCrLf & "(beží " & objList.Count & "x)" End If End Sub

Lukas

Přidáno: 09.09.14 17:46

Dobrý den, bohužel mám problém s 2 příkladem > soubor otevřen v jiné instanci excelu. vždy mi to vrací error 9 i když je otevřen v jiné instanci i když není otevřen. nedokázal by prosím někdo poradit jak vyřešit? jde mi čistě o kontrolu: 1. je sesit otevren? 2. je sesit otevren v jine instanci? Díky

Lukas

Přidáno: 09.09.14 19:11

tak jsem to nakonec vyřešil. kdyby někdo někdy potřeboval tak přikládám kód: On Error Resume Next Set wBook = Workbooks(WBTargetName) If Not wBook Is Nothing Then 'File IS open Application.DisplayAlerts = False Workbooks(WBTargetName).Close Else 'Application.DisplayAlerts = False Workbooks.Open Filename:=SourceFullFilePath bReadOnly = Workbooks(WBTargetName).ReadOnly If bReadOnly = True Then Workbooks(WBTargetName).Close UserChoice = MsgBox("Workbook " & WBTargetName & " is currently open in another Excel instance, please close other instance first and then try it again", vbOKOnly + vbCritical) FillDataFromDB = False Exit Function End If Workbooks(WBTargetName).Close End If Err.Clear

Laďa

Přidáno: 10.09.14 14:31

Já jsem s tím měl taky problém. Nefungovalo mi to. Nakonec strejda Google poradil níže uvedený kod, který mi funguje. Mám tam danou ještě podmínku, aby vynechal sešit Osobních maker - PERSONAL.XLSB, který používám. Díky za spolupráci Sub OtevrenySesit() 'nechá otevřený soubor test 1.xlsm a Osobní sešit maker PERSONAL.XLSB Dim wb As Workbook For Each wb In Workbooks If wb.Name <> "PERSONAL.XLSB" And wb.Name <> "test 1.xlsm" Then MsgBox " Zavřete soubor s názvem " & wb.Name End If Next wb End Sub Následně do kodu doplním hlášku s volbou Uzavřít sešit se změnami -> Uzavřít soubor beze změn. Ale to je už vedlejší :-)

Laďa

Přidáno: 10.09.14 14:42

Sakra, nevím, jak se tam vkládá VBA kod. Takže se omlouvám za předchozí nepřehledný příspěvek :-) Mimochodem, jak se to dělá ? :-)

Lukas

Přidáno: 10.09.14 17:33

das tam html tag < code > na zacatek a pak kde chces ukoncit das < / code > (bez mezer) :)

Laďa

Přidáno: 11.09.14 16:44

Díky. Funguje to tak, že v případě otevřeného jiného souboru, než který otvírám, zobrazí to hlášku a ukončí otevírání. Takže ještě jednou: Sub OtevrenyJinySesit() 'zkontroluje, jestli není otevřený jiný soubor než tento soubor a Osobní sešit maker PERSONAL.XLSB Dim wb As Workbook Dim soubor As String soubor = ActiveWorkbook.Name For Each wb In Workbooks If wb.Name <> "PERSONAL.XLSB" And wb.Name <> soubor Then MsgBox " Zavřete, prosím, soubor s názvem " & wb.Name Application.DisplayAlerts = False Workbooks(TentoSoubor).Close End If Next wb End Sub

Stefan

Přidáno: 20.01.15 18:13

Dobry den Mám jednoduchý dotaz Mám udělané v Excelu tlačítko VB a kliknutím chci otevřít soubor pdf (txt). dim cesta as string cesta = "c:\ahoj.pdf" a ted nevim příkaz open co jsem zkoušel mi nefunguje open cesta....?? soubor pdf chci jenom otevřít jako samostatný soubor pokud budete mít čas, budu moc rád, pokud mi napovíte děkuji

Jojo

Přidáno: 23.01.15 07:46

To Stefan: -- otvorenie PDF súboru z Exc:Sub Test() sPath = "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" sFile = "C:\Test.pdf" Shell sPath & " " & sFile, vbNormalFocus End Sub

stefan

Přidáno: 25.01.15 10:47

dekuji jojo moc super otevreni souboru proběhne Mam ale jedno ale : jak zajistim otevreni na jinem pocitaci, když nevim, jaka je cesta k exe souboru (třeba opet k pdf) popřípadě neznam verzi pdf. Potrebuji, aby to fungovalo univerzalne lze toto zajistit

Jojo

Přidáno: 26.01.15 12:30

To Stefan: -- otvorenie PDF súboru z Exc(2):Sub Test() '"C:\Test.pdf" musí existovať Dim WShell As Object Set WShell = CreateObject("WScript.Shell") On Error Resume Next WShell.Run "C:\Test.pdf" On Error GoTo 0 End Sub

stefan

Přidáno: 26.01.15 16:36

jojo dekuji moc Je to presne to, co jsem potreboval

Zbyněk

Přidáno: 04.02.15 17:39

Dobrý den, prosím o radu. Při makru, které testuje jestli je sešit otevřen nebo ne se excel někdy restartuje a někdy makro pracuje bez problémů. Děkuji. Sub VloziDoNabidkyNove() Cells.Select ' vybere ve zdrojovém sešitě Selection.Copy On Error Resume Next Set Sesit = Workbooks("Nabidka.xlsx") 'testuje zda je sešit otevřen sesitOtevren = Not Sesit Is Nothing If sesitOtevren = True Then Else Workbooks.Open "C:\Users\Zoro2\Desktop\Nabidka.xlsx" End If Range("A1").Select ActiveSheet.Paste End Sub

Hanka

Přidáno: 05.02.15 16:16

Prosím o radu - chtěla bych nahrát makro do osobního sešitu maker (PERSONAL), ale při záznamu mi to hlásí, že tento sešit není otevřen.. proklikala jsem už kde co, ale nemůžu nikde najít nastavení vlastností tohoto sešitu. Jak PERSONAL otevřít? Díky.






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |