Nepozeral som ešte na riešenie od kolegu, ale zdá sa mi makro zbytočné. To sa dá overiť aj vzorcom, ak to dobre chápem...
A skúšal ste ten filter aj vypnúť, ako radí Havran ?
Alebo napr aj takto:
Sub NSTDaProdej()
With Sheets("Nstd")
If .FilterMode Then .ShowAllData
.Range("$A$1:$I$501").AutoFilter Field:=10, Criteria1:=CBool(1)
End With
End Sub
Inak v E2016 Pro x64 SK funguje aj True aj "True" aj CBool(1).
Takto zistíte status pre daný podnik s jeho najvyšším dátumom (maticový vzorec Ctrl+Shift+Enter).
=INDEX($B$2:$B$170;MATCH(MAX(IF($A$2:$A$170=A2;$C$2:$C$170));$C$2:$C$170;0))
=INDEX($B$2:$B$170;POZVYHLEDAT(MAX(KDYŽ($A$2:$A$170=A2;$C$2:$C$170));$C$2:$C$170;0))
Príklad vzorcami aj makro-UDF.
Pr.
A = Right(A, Len(A) - InStrRev(A, Application.PathSeparator))
alebo
A = Split(A, Application.PathSeparator)(UBound(Split(A, Application.PathSeparator)))
Tak to očúrajte poupravením vzorca od eLCHa a je to tak na 99,4569832000001 %.
Definovaný názov KONIEC:
=MID($A1;FIND("#";SUBSTITUTE($A1;" ";"#";LEN($A1)-LEN(SUBSTITUTE($A1;" ";""))))+1;1000)
=ČÁST($A1;NAJÍT("#";DOSADIT($A1;" ";"#";DÉLKA($A1)-DÉLKA(DOSADIT($A1;" ";""))))+1;1000)
Ulica:
=IF(OR(ISNUMBER(--LEFT(KONIEC;1));ISNUMBER(--RIGHT(KONIEC;1)));KONIEC;"")
=KDYŽ(NEBO(JE.ČISLO(--ZLEVA(KONIEC;1));JE.ČISLO(--ZPRAVA(KONIEC;1)));KONIEC;"")
Číslo (ak nieje, tak ""):
=IF(OR(ISNUMBER(--LEFT(KONIEC;1));ISNUMBER(--RIGHT(KONIEC;1)));LEFT(A1;FIND("#";SUBSTITUTE(A1;" ";"#";LEN(A1)-LEN(SUBSTITUTE(A1;" ";"")))));A1)
=KDYŽ(NEBO(JE.ČISLO(--ZLEVA(KONIEC;1));JE.ČISLO(--ZPRAVA(KONIEC;1)));ZLEVA(A1;NAJÍT("#";DOSADIT(A1;" ";"#";DÉLKA(A1)-DÉLKA(DOSADIT(A1;" ";"")))));A1)
Za číslo na konci sa považuje prípad, aj je prvý alebo posledný znak číselný. Teda aj "2b", "b2", "6/2" a pod.
Na to, čo potrebujete s listom robiť, ho potrebujete zobrazený (tlač ???) ? Ak sa potrebujete odkazovať na Range() či Cells(), tak to jednoducho spravte "bodkovou notáciou":
With Sheets("List1")
'Môj kód
.Range("A1:C100").ClearContents
.Cells(1,1).Value = 3.1415
... 'podobné odkazy začínajte s bodkou
End With
Čo Vám hádže chyby, a aké ?
Application.ScreenUpdating ? Tomu sa mi nechce veriť.
Sheets("List1").Visible = 0 ? Asi iba ak je list zamknutý, alebo posledný zobrazený.
Skúste uviesť prílohu, ľahšie sa Vám dostane presnej rady.
V staršej verzii to bude QueryTables v novšej Connection.
Čistý tip, z brucha 2 verzie. Neskúšal som:
Sub Nacti()
With ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app")
.Refresh
Do
Loop While .Refreshing
End With
With ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1")
.Refresh
Do
Loop While .Refreshing
End With
End Sub
Sub Nacti2()
Dim i As Integer
ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refresh
Do Until i = False
i = ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app").Refreshing
Loop
i = 0
ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refresh
Do Until i = False
i = ThisWorkbook.Connections("Dotaz z s-st-sl8db_Live_app1").Refreshing
Loop
End Sub
EDIT:
A ešte ma napadá či máte skutočne správne názov dotazu, a či Data_Operace je CodeName alebo nápis na ušku listu. Je rozdiel
Data_Operace.xyz
Worksheets("Data_Operace").xyz
Skúste refresh-núť oba dotazy samostatne a po každom použite toto:
Do
Loop While MenoListu.QueryTables("NazovDotazu").Refreshing
či to nepomôže.
Nechce sa mi čítať celú tému, skúsim iba od pása tipnúť, čo má asi robiť Váš posledný kód:
Sub VytvorList()
Dim bunka As String, test As Long
bunka = Format(Sheets("Zadávací_list").Range("F7").Value2, "d.m.yyyy h.mm.ss")
On Error Resume Next
test = Len(Sheets(bunka).Name)
On Error GoTo 0
If test <> 0 Then
MsgBox ("Nelze provést! => List s požadovanými daty již existuje!" & vbNewLine & "Proveďte novou aktualizaci dat tlačítkem Načti data na záložce Zadávací_list.")
Else
Application.ScreenUpdating = False
Sheets.Add After:=Worksheets(Sheets.Count):
With ActiveSheet
.Range("B2").Value = "Aktualizováno:"
.Range("B3").Value = bunka
.Name = bunka
.Range("A11").Select
End With
ActiveWindow.FreezePanes = True
Application.ScreenUpdating = True
End If
End Sub
Zosúladte si dátumové systémy v súboroch. Jeden používa 1904 a druhý nie.
Súbor - Možnosti - Rozšírené - Pri výpočte tohto zošita - Použiť dátumový systém 1904.
Zaujímavé ...
Keď si zoberiem číslo 41524,5981365741 (čo zodpovedá dátumu 7.9.2013 14:21:19) a dám ho naformátovať ako dátum v tom Vašom XLSM, alebo v hocijakom inom súbore, zobrazí ho správne, ale keď to isté urobím vo Vašom XLSX, zobrazí ho ako 8.9.2017 14:21:19. Bez makra, s makrom nič nerobím. Zaujímavé, bude polnoc, nič ma nenapadá. Uvidíme čo na to múdrejšie hlavičky
A určite sa volá ten list "kalkulace" ?
EDIT: Ach, až teraz som sa pozrel do tej Vašej prílohy. V popise máte "kalkulace" a v prílohe "KALKULACE". Viete už snáď aký je medzi tým rozdiel, a čo treba v makre zmeniť, však ?
Toto dajte do modulu:
Sub SkrytListy()
Call Zobraz(xlSheetVeryHidden)
End Sub
Sub ZobrazitListy()
Call Zobraz(xlSheetVisible)
End Sub
Sub Zobraz(HDN As Long)
Dim List As Worksheet
Application.ScreenUpdating = False
For Each List In ThisWorkbook.Worksheets
If List.Name <> "kalkulace" Then List.Visible = HDN
Next
ThisWorkbook.Worksheets("kalkulace").Activate
Application.ScreenUpdating = True
Set List = Nothing
End Sub
A jednému tlačítku priraďte cez pravý klik makro "SkrytListy" a druhému "ZobrazitListy".
Čo znamená "vypočítat podobné číslo" ? Ako ste dostal z tých "dát" vľavo, tie správne čísla vpravo ?
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.