< návrat zpět

MS Excel


Téma: Kontrola, zda je již soubor otevřený rss

Zaslal/a 18.5.2020 11:11

Dobrý den,

mám vytvořený Excel sešit, ve kterém pomocí makra (tlačítko1) otevírám jiný sešit a chtěl bych napsat do kódu podmínku, která by při kliknutí na tlačítko1 nejdříve ověřila, jestli není otevíraný sešit již otevřený.

Pokud ne --> tak sešit otevřít,
Pokud ano --> přejít do již otevřeného sešitu.

Je vůbec možné něco takového napsat přes VBA? Pokud ano, neposkytl by mi někdo kód, který by toto řešil?

Děkuji mnohokrát za případné rady 1

Zaslat odpověď >

#046643
elninoslov
2 príklady, je to úplne jednoduché:
Sub Makro1()
Dim Zosit As String, Cesta As String

Cesta = "D:\Download\"
Zosit = "Príklad KT.xlsx"
On Error Resume Next
Workbooks(Zosit).Activate
If Err.Number <> 0 Then Workbooks.Open Cesta & Zosit
On Error GoTo 0

'práca s daným zošitom ActiveWorkbook
End Sub


Sub Makro2()
Dim WB As Workbook, Zosit As String, Cesta As String

Cesta = "D:\Download\"
Zosit = "Príklad KT.xlsx"
On Error Resume Next
Set WB = Workbooks(Zosit)
On Error GoTo 0
If WB Is Nothing Then Set WB = Workbooks.Open(Cesta & Zosit)

With WB
.Activate 'Activate nieje potrebné na bežné veci. Stačí sa odkazovať na WB alebo použiť with s bodkovou notáciou
'práca s daným zošitom
End With
End Sub
citovat
#046644
avatar
Mnohokrát Vám děkuji za pomoc. Funguje přesně podle mých představ 1citovat
#046646
elninoslov
Ešte by som tam prípadne doplnil kontrolu, či ten otvorený súbor má správnu cestu. Ľahko sa môže stať, že otvorený súbor bude iný, napr. záložnom adresári, či napr. minulomesačný súhrn, ... len sa bude volať rovnako. Možností ako to spliesť je veľa. Pre istotu. Treba na to myslieť, lebo operácie makrom nemajú Undo.
Sub Makro2()
Dim WB As Workbook, Zosit As String, Cesta As String

Cesta = "D:\Download\"
Zosit = "Príklad KT.xlsx"
On Error Resume Next
Set WB = Workbooks(Zosit)
On Error GoTo 0
If WB Is Nothing Then
Set WB = Workbooks.Open(Cesta & Zosit)
Else
If WB.Path & "\" <> Cesta Then
MsgBox "Je otvorený nesprávny súbor" & vbNewLine & WB.Path & "\" & Zosit & vbNewLine & vbNewLine & _
"Použite správny súbor" & vbNewLine & Cesta & Zosit, vbCritical
Exit Sub
End If
End If

With WB
.Activate 'Activate nieje potrebné na bežné veci. Stačí sa odkazovať na WB alebo použiť with s bodkovou notáciou
'práca s daným zošitom
End With
End Sub
citovat
#046671
avatar
Dobrý den, děkuji za odpověď. Zkouším tuto kontrolu do svého kódu dostat, ale dostávám compile error Else without If - v mém případě ani nepotřebuji žádnou chybovou hlášku, stačí mi, že pokud jméno a adresář souboru neexistuje (nebo je jiný), tak aby makro v tu chvíli skončilo. Kód mám napsaný takto:

Sub CustomWorkbook6()
Dim CWB6 As Workbook
'CustomWorkbook
Dim CFN6 As String
'Full Name of the file including file extension (e.g. .xlsm)
Dim CFP6 As String
'Full Path to the file including "\" in the end.
CFN6 = Sheets("MasterData").Range("BF20").Value
CFP6 = Sheets("MasterData").Range("BE20").Value
On Error Resume Next
Set CWB6 = Workbooks(CFN6)
On Error GoTo 0
If CWB6 Is Nothing Then Set CWB6 = Workbooks.Open(CFP6 & CFN6)
Else
If CWB6.Path <> CFP6 Then
Exit Sub
End If
End If
With CWB6
.Activate
End With
End Sub
citovat
#046672
elninoslov
Pozor si dajte If - Then - Else - End If
Ak pokračujete kódom hneď za Then v tom istom riadku, nemôžete potom pridať poď to Else ani End If.
Proste ak píšete do riadku, tak všetko, ak pod seba tak všetko.
Váš kód netestujem, len úprav aod pohľadu z brucha :)
Sub CustomWorkbook6()
Dim CWB6 As Workbook
'CustomWorkbook
Dim CFN6 As String
'Full Name of the file including file extension (e.g. .xlsm)
Dim CFP6 As String
'Full Path to the file including "\" in the end.
CFN6 = Sheets("MasterData").Range("BF20").Value
CFP6 = Sheets("MasterData").Range("BE20").Value
On Error Resume Next
Set CWB6 = Workbooks(CFN6)
On Error GoTo 0
If CWB6 Is Nothing Then Set CWB6 = Workbooks.Open(CFP6 & CFN6)
If CWB6.Path <> CFP6 Then Exit Sub
With CWB6
.Activate
End With
End Sub
citovat
#046673
avatar
Ano, máte pravdu, to byl nejspíše ten problém. Děkuji za pomoc 1citovat
#046674
elninoslov
Aj tak tam ale vidím problém v kontrole správnosti cesty práve otvoreného súboru:
If CWB6.Path <> CFP6 Then
V komentári máte, že CFP6 je aj s "\" na konci (aj musí kvôli Open), no CWB6.Path vráti cestu bez "\", teda sa to rovnať nikdy nebude. Preto použite
If CWB6.Path & "\" <> CFP6 Then
alebo
If CWB6.FullName <> CFP6 & CFN6 Thencitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje