Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
jak zjistit zda již není soubor danného jména otevřen?
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.
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.
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
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.
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ů.
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
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
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
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
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ší :-)
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á ? :-)
Přidáno: 10.09.14 17:33
das tam html tag < code > na zacatek a pak kde chces ukoncit das < / code > (bez mezer) :)
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
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
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
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
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
Přidáno: 26.01.15 16:36
jojo dekuji moc Je to presne to, co jsem potreboval
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
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.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 |