Veď ja to robím pod Office 2003, ako Vy. Asi bude rozdiel vo verzii. Aké číslo Vám dáva
Application.Version
?
EDIT:
Zmente toto:
If Application.Version = "11.0" Then
na toto:
If Val(Application.Version) < 12 Then
Musí to fungovať. Teraz to skúšam. Napíšte ešte tú verziu Application.Version a problém môžu byť aj prístupové práva na umiestnenie súboru napr. na sieti.
Krkolomne, ale predsa aspoň nejako sa mi to podarilo poriešiť. Vymeníme v pripájacom dotaze nielen cestu, ale aj poskytovateľa.
Private Sub Workbook_Open()
Dim CS As String, Cesta As String, Poz1 As Long, Poz2 As Long, CON, Prov As String
On Error GoTo CHYBA
With ThisWorkbook
Cesta = .Path & "\zdrojová data.xls"
If Application.Version = "11.0" Then
Set CON = .Worksheets("List1").QueryTables("zdrojová data")
Prov = "Microsoft.Jet.OLEDB.4.0"
Else
Set CON = .Connections("zdrojová data").OLEDBConnection
Prov = "Microsoft.ACE.OLEDB.12.0"
End If
With CON
CS = .Connection
Poz1 = InStr(1, CS, "Provider=") + 8
Poz2 = Len(CS) - InStr(Poz1, CS, ";User") + 1
CS = Left$(CS, Poz1) & Prov & Right$(CS, Poz2)
Poz1 = InStr(1, CS, "Source=") + 6
Poz2 = Len(CS) - InStr(Poz1, CS, ";Mode=") + 1
CS = Left$(CS, Poz1) & Cesta & Right$(CS, Poz2)
.Connection = CS
.Refresh
End With
End With
Exit Sub
CHYBA:
MsgBox ("Chyba pri aktualizácii zdrojovej tabuľky :" & vbNewLine & Cesta)
End Sub
Pripájam pre istotu aj súbor v ktorom mi to fachá obojstranne (XP SP3 + Off2003 SP3 / W10 x64 + Off2016 x64).
Zatiaľ veru neviem, nahodil som si do virtuálky XP s Off2003, ale len čisté XP SP3, aj na Off iba SP3. V Off2003 nieje pod ThisWorkbook objekt Connections, ale iba pod List(x).QueryTables.
Možno je potrebné urobiť kompletnú aktualizáciu OS, Off, .NET, ale to je tak na pol dňa, alebo zapnúť References, žiaľ som neprišiel na to aké.
Prípadne skúsiť vytvoriť u Vás rovnaký dotaz rovnakým spôsobom na rovnakých dátach, v Off 2003, a tieto dotazy by sa použili podmienene podľa verzie Off (ak obdobný dotaz Off 2003 podporuje).
Ja som skúsil napr. MS Query dotaz, ktorý by mal snáď fungovať aj tam aj tam.
Niekto zbehlejší snáď popichne, čo s tým...
Jedno z možných rieš. (maticovo): EDIT - tento prvý má chybu, viď dole - nepoužívať.
=IFERROR(INDEX($G$2:$G$12;MATCH(1;($F$2:$F$12=A2)*($G$2:$G$12>=B2);0));"")
=IFERROR(INDEX($G$2:$G$12;POZVYHLEDAT(1;($F$2:$F$12=A2)*($G$2:$G$12>=B2);0));"")
alebo (maticovo)
=MIN(IF(($F$2:$F$12=A2)*($G$2:$G$12>=B2);$G$2:$G$12))
=MIN(KDYŽ(($F$2:$F$12=A2)*($G$2:$G$12>=B2);$G$2:$G$12))
EDIT:
Alebo skôr takto (maticovo):
=IFERROR(SMALL(IF(($F$2:$F$12=A2)*($G$2:$G$12>=B2);$G$2:$G$12);1);"")
=IFERROR(SMALL(KDYŽ(($F$2:$F$12=A2)*($G$2:$G$12>=B2);$G$2:$G$12);1);"")
1. vzorec nevráti správnu hodnotu, ak nebudú hodnoty v G zoradené vzostupne. Čo je chyba, pretože nemusí byť hodnotovo najbližšia hodnota najbližšie k začiatku.
2. vzorec je OK, len vracia pri nenájdení vhodnej hodnoty číslo 0.
3. vzorec je OK nevracia 0 ak nevyhovuje žiadna hodnota, ani nemusia byť hodnoty vzostupné.
Ak sa nemýlim, toto by mala byť odpoveď na Vašu otázku, ale mne sa to žiaľ nepodarilo rozbehať. Skúste...
Link to a specific PowerPoint 2003, 2007 or 2010 slide from Microsoft Word or Excel
Keďže sa mi nedá editovať posledný príspevok, a nieje to z neho celkom jasné
...Filename:=Cesta & OdstranHovadiny(Nazev, "-")...
tak pridávam trochu prerobenú verziu, viac v popise makra a v prílohe.
Function PrecistiNazov(Hodnota As String, Nahrad As String, Odporucane As Boolean, Optional KontrolaNahrad = True) As String
Dim i As Byte, arrN, DN As Byte, DH As Byte, LH As Byte
If Len(Hodnota) = 0 Then GoTo CHYBA
DN = Len(Nahrad)
If KontrolaNahrad Then
If DN <> Len(PrecistiNazov(Nahrad, "", Odporucane, False)) Then GoTo CHYBA 'Prečistenie nahradzovacieho reťazca
End If
arrN = Array(Chr(255), "/", ":", "*", "?", "„", "<", ">", "|", "\", "#", "%", "&", "{", "}", "=") 'Pole nahradzovaných znakov
Hodnota = WorksheetFunction.Trim(Hodnota) 'Ošetrenie nadbytočných medzier, zlomov ...
For i = 0 To IIf(Odporucane, UBound(arrN), 9) 'Nahradenie vybraných sád znakov
Hodnota = Replace(Hodnota, arrN(i), Nahrad)
Next i
If DN <> 0 Then
Hodnota = Replace(Replace(Replace(Hodnota, Nahrad, "/::"), "::/", ""), "/::", Nahrad) 'Ošetrenie duplicít nahradzovacích reťazcov
DH = Len(Hodnota)
If DH > DN Then
LH = IIf(Left$(Hodnota, DN) = Nahrad, DN, 0)
Hodnota = Mid$(Hodnota, LH + 1, DH - LH - IIf(Right$(Hodnota, DN) = Nahrad, DN, 0)) 'Ošetrenie výskytu nahradzovacích reťazcov na okrajoch
End If
End If
PrecistiNazov = Hodnota
Exit Function
CHYBA:
PrecistiNazov = "" 'V prípade chyby vráti ""
'PrecistiNazov = CVErr(xlErrValue) 'V prípade chyby vráti #HODNOTA + treba zmeniť návratovú premennú na Variant
End Function
Dá sa to urobiť na 100 spôsobov, s rôznymi "vylepšeniami". Nech si každý doplní, myslím, že je to teraz úplne jasné.
krkstex, nemyslíte si snáď, že okrem Vás tu všetci pracujeme v Langley, že nie ? Čo ste nám to sem predhodil na dekódovanie ? To je recept od babičky na makové slíže, či odpaľovacie kódy rakiet KĽDR ? Ťažko povedať ...
Dosť srandy. Niekto to snáď pochopil, netvrdím že nie, len za seba Vás prosím, vysvetlite to podstatne inak, lepšie, názornejšie, a príkladne presne.
Napr.
- aký je vzťah medzi tabuľkami (bunka voči bunke na rovnakej pozícii)?
- čo znamená Ano/Ne (tip Ano znamená 5 cm miesta na palete)?
- znázorňuje to kocku, a toto je vlastne 3D súradnicový systém (krok 5 cm)?
- čo znamená skupina? Rovnobežný útvar Ano (aj viacriadkový)?
- čo sú čísla 1-49
A príklad nejakého výsledku...
Toto Vám nemôže prejsť :
aData(i, 5)
Stĺpce načítate iba 3.
Testujete, či prvý riadok nieje prázdny, to je v poriadku, lebo xlUp vráti 1 aj keď je prázdny, ale neskôr v cykle idete až od 2. riadku. Teda predpokladám, že stĺpce dát v tabuľke majú nejakú hlavičku v prvom riadku. Preto si to radšej upravte približne takto.
Pripočíta 1,2 alebo 3 dni, podľa toho či je dátum Pi, So, alebo zvyšné.
Predpokladám, že budete ešte neskôr potrebovať riešiť aj sviatky :)
Skúste sa mrknúť na vysvetlenie vzorca
Ak je v D8 to maximum, tak napr takto (maticovo):
=INDEX(G5:FS5;MATCH(1;(MOD((COLUMN(G8:FS8)-7);7)=0)*(G8:FS8=D8);0))
=INDEX(G5:FS5;POZVYHLEDAT(1;(MOD((SLOUPEC(G8:FS8)-7);7)=0)*(G8:FS8=D8);0))
Príp. skúste takéto niečo.
Ak chcete tlačiť vždy za sebou idúci neznámy počet tabuliek, tak medzi ne vložte zlomy strán (Rozloženie strany - Zlomy strán - Vložiť zlom strany). Nadrobte si zlomy na dostatočný počet budúcich možných tabuliek, teda na N x 9 riadkov, alebo použite verziu s makrom, ktoré si samo pred samotným spustením tlače (nevidíte to v náhľade) vloží zlomy každých 9 riadkov až po posledný použitý riadok na liste TBL.
Áno samozrejme, lebo Cesta obsahuje dvojbodku. A ak by bol parameter Odporucane na True, tak by Cesta obsahovala aj \, čo by bola ďalšia chyba. To som prehliadol, keď som to písal. Na funkčnosť funkcie to nemá vplyv. Teda Cesta & Funkcia.
PS: Nie, že budete niekde prezentovať názov funkcie taký ako som dal ja, premenujte si ju
Skúste či to chápem ...
?
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.