< návrat zpět

MS Excel


Téma: prepojenie medzi zositmi rss

Zaslal/a 5.6.2015 18:50

Ahojte, mam taku otazku da sa prepojit dva zosity?
Chcel by som aby zosit PREPOJENIE bol prepojeny so zositom DATA. Ak otvorim zosit PREPOJENIE nacita udaje zo zosita DATA.

Dakujem

Příloha: rar25358_prepojenie.rar (13kB, staženo 19x)
Zaslat odpověď >

Strana:  1 2   další »
#025359
elninoslov
Ak tento vzorec vložíte do bunky A2, a rozkopírujete ho na všetky potrebné stĺpce a riadky, bude kopírovať údaje zo zatvoreného Data.
=IF([data.xlsx]Hárok1!A2="";"";[data.xlsx]Hárok1!A2)
Ale nie hyperlinky. To by sa muselo pravdepodobne makrom, pri otvorení zošita, alebo pri nej príležitosti (časovač, aktivácia, klik...).citovat
#025360
Hav-Ran
Do zatvoreného súboru kde napr. iečo hľadáme, musí byť aj cesta. Aj jednoduché prepojenie s odkazom na bunku by ju malo mať.
Asi ako toto:
=VLOOKUP(D6300;'F:\TIPO\2.doma\[Tipovacky_201506.xls]prevod'!$B$1:$D$1000;3;0)citovat
#025361
elninoslov
Pre nastavenie Hyperlinkov možno použiť makro :
Sub AktualizujHyp()
Dim Bunka As Range, H As String, R As Long
With ThisWorkbook.Worksheets("Hárok1")
R = .Range("A:D").Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row - 1
If R = 0 Then Exit Sub
For Each Bunka In .Cells(2, 4).Resize(R)
If Not IsEmpty(Bunka) Then
With Bunka
H = .Value
H = IIf(Left(H, 4) = "http", "", "http://") & H
With .Hyperlinks
If .Count = 0 Then .Add anchor:=Bunka, Address:=H Else Bunka.Hyperlinks(1).Address = H
End With
End With
End If
Next Bunka
End With
End Sub

Nechať ho spustiť napr po otvorení súboru.
Treba ale predikovať, koľko riadkov má byť zaplnených vzorcami, keďže netuším, aká by sa dala aplikovať funkcia na zistenie počtu zaplnených riadkov v zatvorenom zošite, okrem :
1. vzorec v pomocnom liste alebo bunke
=COUNTA('Z:\Prepojené zošity\[data.xlsx]Hárok1'!A:A)
2. cyklické prechádzanie buniek v A:A cez ExecuteExcel4Macro, to je ale pomalé.citovat
#025363
elninoslov
Ešte by sa to dalo celé riešiť napr aj takto :
Sub AktualizujHyp()
Dim Bunka As Range, H As String, R As Long
Dim EXA As Excel.Application, WB As Workbook, WS As Worksheet
Set EXA = CreateObject("Excel.Application")
Set WB = EXA.Workbooks.Open(Application.ThisWorkbook.Path & "\data.xlsx")
Set WS = WB.Worksheets("Hárok1")
R = WS.Range("A:D").Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
With ThisWorkbook.Worksheets("Hárok1")
With .Range("A:D")
.ClearContents
.Resize(R) = WS.Range("A:D").Resize(R).Value
End With
WB.Close False
Set EXA = Nothing
If R = 1 Then Exit Sub
For Each Bunka In .Cells(2, 4).Resize(R - 1)
If Not IsEmpty(Bunka) Then
With Bunka
H = .Value
H = IIf(Left(H, 4) = "http", "", "http://") & H
With .Hyperlinks
If .Count = 0 Then .Add anchor:=Bunka, Address:=H Else Bunka.Hyperlinks(1).Address = H
End With
End With
End If
Next Bunka
End With
End Sub

Predošlé makro doplnené a zaujímavý spôsob prístupu do zatvoreného súboru od Paloo, čerpané odtiaľto:
http://wall.cz/index.php?m=topic&id=24364#post-24377
Treba to ale ešte zabezpečiť na odchyt chýb, pretože to vytvára samostatnú aplikáciu Excel (skrytú), a akonáhle príde k nejakej chybe, tak tento druhý Excel ostane visieť s alokovanými zdrojmi, teda aj zamknutým data.xlsx pre zápis.
V tomto prípade by možno šlo použiť aj Copy Paste, a nemusia sa potom upravovať linky v prípade, že sú to http linky, a nie len www. Mne totiž www neotvorí, iba http. Takže ak to nieje len nesprávnym nastavením môjho Excelu, a chcete mať zobrazené názvy linkov tak ako ich máte, potom treba urobiť aj tú spodnú časť kódu.

EDIT:
Tak toto je metóda, ako skopírovať celú použitú oblasť z data.xlsx aj s formátovaním a hyperlinkami proste tak ako to je v data.xlsx. Ale ako som spomínal, treba zvážiť počet plánovaných riadkov, či nebude lepšie použiť Excel4Makro a počet riadkov mu určí schovaný vzorec s COUNTA, alebo presypať cez Value, alebo vložiť vzorec, a upraviť Hyperlinky bunku po bunke.
Sub Aktualizuj()
Dim EXA As Excel.Application
Set EXA = CreateObject("Excel.Application")
With EXA.Workbooks.Open(Application.ThisWorkbook.Path & "\data.xlsx").Worksheets("Hárok1").Range("A:D")
.Resize(.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row).Copy
Windows("prepojenie.xlsm").Activate
With ThisWorkbook.Worksheets("Hárok1").Range("A:D")
.Clear
.Cells(1, 1).Activate
Application.CutCopyMode = False
ActiveSheet.Paste
.Cells(1, 1).Select
End With
End With
Set EXA = Nothing
End Sub
citovat
#025366
avatar
Ahojte, dakujem za pomoc Hav-ran a elninoslov. Pouzil som riesenie posledne od elninoslov. Pocet riadkov ktore budem zaplnat je 1000, potom sa subor archivuje a vytvori sa novy taskze som to vyriesil:

With EXA.Workbooks.Open(Application.ThisWorkbook.Path & "\data.xlsx").Worksheets("Hárok1").Range("A:D1000")

Problem mi ale sposobuje ze po zatvoreni zosita "prepojenie" sa mi zobrazuje na ploche hlaska Subor je k dispoyicii a stale chce otvorit zosit databza. Prespokladam ze ak prebehne makro ostane zosit v pamati PC otvoreny nedalo by sa nejak zabranit tejto hlaske? Dakujem moc ste mi pomohlicitovat
#025368
elninoslov
U mna sa nič také neprejavovalo, ale skúsim si z tabletu tipnúť:
1. Nezabudli ste na zrušenie inštancie Excelu v pamäti ? Keđže táto inštancia je vlastníkom toho zošitu, mal by byť zrušený spolu s nou.
Set EXA = Nothing
2. Ak nepomôže, tak skúste
Sub Aktualizuj()
Dim EXA As Excel.Application, WB as Workbook
Set EXA = CreateObject("Excel.Application")
Set WB = EXA.Workbooks.Open(Application.ThisWorkbook.Path & "\data.xlsx").Worksheets("Hárok1")
With WB
.Range("A:D").Resize(.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row).Copy
Windows("prepojenie.xlsm").Activate
With ThisWorkbook.Worksheets("Hárok1").Range("A:D")
.Clear
.Cells(1, 1).Activate
Application.CutCopyMode = False
ActiveSheet.Paste
.Cells(1, 1).Select
End With
End With
Set WB = Nothing
Set EXA = Nothing
End Sub

3. Prípadne vyskúšať ako posledný príkaz v konštrukcii
With WB...
doplniť
.Close
4. Skontrolujte si v Správcovy procesov (Ctrl+Shift+ESC), či Vám nebežia đalšie inštancie Excelu z predošlých pokusov. Ak áno, tak pklik a Ukončiť proces.citovat
icon #025369
eLCHa
@elninoslov
je to hooodně písmen, takže jsem to celé nečetl. Pomohlo to a to je hlavní, ale nedá mi to
je nějaký důvod proč to dělat v další instanci excelu? Proč to neuděláte v už spuštěné?citovat
#025370
elninoslov
Pretože ma nenapadá ako inak zistiť počet riadkov v zatvorenom zošite, a potom tieto riadky skopírovať aj s Hyperlinkom (HL). Na môj návrh spočítať riadky vzorcom v pomocnej bunke (v schovanom stĺpci, liste ...), alebo použitie Excel4Macro, nikto nereflektoval.
Vzorec HL nezkopíruje, ale na opätovné vytvorenie HL som sem makro dal. Testovať to nejdem, ale možno vytvorenie inštancie Excelu + Copy Paste, bude trvať kratšie ako nakopírovanie potrebného počtu vzorcov, prebehnutie 1000 buniek kvôli vytvoreniu HL.
Ale možno ide kopčiť HL so zatvoreného zošitu, aj inak. Zatiaľ ďalej neskúmam.citovat
#025372
elninoslov
Toto by malo odolať chybe, a nič po sebe nezanecháva. V predošlom kóde upravenom v noci z hlavy v tablete, bola chyba.
Sub Aktualizuj()
Dim EXA As Excel.Application, WB As Workbook
Set EXA = CreateObject("Excel.Application")
Set WB = EXA.Workbooks.Open(Application.ThisWorkbook.Path & "\data.xlsx")
On Error GoTo CHYBA
With WB.Worksheets("Hárok1").Range("A:D")
.Resize(.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row).Copy
Windows("prepojenie.xlsm").Activate
With ThisWorkbook.Worksheets("Hárok1").Range("A:D")
.Clear
.Cells(1, 1).Activate
Application.CutCopyMode = False
ActiveSheet.Paste
.Cells(1, 1).Select
End With
End With
CHYBA:
If Err <> 0 Then vbMsg = MsgBox("Chyba pri aktualizácii dát.", vbCritical, "Aktualizácia")
If Not WB Is Nothing Then WB.Close False
Set WB = Nothing
Set EXA = Nothing
End Sub
citovat
icon #025373
eLCHa
Tak popořadě
zeptám se - proč nelze použít:
Pro buňku A2='cesta\[data.xlsx]Hárok1'!A2pro B2, C=KDYŽ(A2="";"";'cesta\[data.xlsx]Hárok1'!B2)a pro D2=KDYŽ(A2="";"";HYPERTEXTOVÝ.ODKAZ("http:\\"&'cesta\[data.xlsx]Hárok1'!D2;'cesta\[data.xlsx]Hárok1'!D2))a zkopírovat dolů. Možná to vidím moc jednoduše...

edit:
přidal jsem http do vzorce - bez toho mi odkaz nefungovalcitovat

Strana:  1 2   další »

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

Alfan • 24.4. 16:32

Relativní cesta - zdroje Power Query

Alfan • 24.4. 15:44

Relativní cesta - zdroje Power Query

elninoslov • 24.4. 14:26

Jak odstraním duplicitní údaje

Mirek8 • 24.4. 12:13

Jak odstraním duplicitní údaje

elninoslov • 24.4. 8:57

Vyhledej

PavDD • 24.4. 8:56

Vyhledej

elninoslov • 24.4. 8:47