Přišlo mi to jako hodně pěkná úloha pro power query tak jsem to zkusil (OP píše excel 2016, tak proč ne)
Je to můj první větší pokus s PQ a už nemám čas, takže ty čárky v závorkách odstraňovat nebudu.
Funguje to pěkně, aktualizuje se pomocí Data - Aktualizovat vše
Mám tam 3 ze 4 požadovaných listů.
Z referencemi to nemá nic společného.
Máte při spuštění kódu Outlook spuštěný nebo ne? CreateObject vytváří novou instanci a to může dělat problémy.
Zkuste nahradit tímto.Dim OutApp As Object
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
End IfNejdříve otestuje otevřenou instanci a k ní se připojí. Pokud není, pak vytvoří novou.
Obrázky nedávejte na externí server, lze je zde uložit jako přílohu.
doplňte, co se v těchto případech má vypsat
@elninoslov
Já sice nemám Office 2016 a vše se vyvíjí, ale když použiju CreateObject tak přece nepotřebuji reference
@RK
Odkrokujte a zjistěte, na kterém řádku to padá.
Balon a plachetnici máte naopak ;)
=INDEX(text!$B$1:$B$10;POZVYHLEDAT(INDEX($B$1:$K$1;POZVYHLEDAT(LARGE($B$14:$K$14;1);$B$14:$K$14;0));text!$A$1:$A$10;0))
Ve funkciLARGE($B$14:$K$14;1)změňte druhý argument (1) podle pořadí, které hledáte.
Není řešeno, pokud budou dva výsledky shodné
Mno, ale nedalo mi to.
Toto je kód, jak by pravděpodobně vypadal u mne
Při volání procedury vyplníte pouze názvy listů, které chcete skrýt, odděleny středníkem.
Nevím, jestli to u vás bude fungovat - bez přílohy nemohu odladit - takto jsem to vyčetl z toho kódu (neladil jsem ani u sebe - musel bych vytvářet sešit s podobnou strukturou a to se mi nechce) - námět ke studiu
Private Sub CommandButton1_Click()
Dim sUserName As String
Dim sPassword As String
sUserName = TextBox1.Value
sPassword = TextBox2.Value
If Not sUserName = "" And sPassword = "" Then
Dim iUser As Long
iUser = -1
On Error Resume Next
iUser = Application.WorksheetFunction.Match(sUserName, Sheets("UserData").Columns(1), 0)
On Error GoTo 0
If Not iUser = -1 Then
If Sheets("UserData").Cells(iUser, 2).Value2 = sPassword Then
Dim bScreen As Boolean
bScreen = Application.ScreenUpdating
Application.ScreenUpdating = False
Select Case CStr(Sheets("UserData").Cells(iUser, 3).Value2)
Case "MASTER"
Call subSetSheets(vbNullString)
Case "OSTAT"
Call subSetSheets("START;PLT;PL_TS;1;2;3")
Case "OSOUKR"
Call subSetSheets("START;PLT;PL_TS;1;2;3;1S;2S;3S")
End
Application.ScreenUpdating = bScreen
Else
MsgBox "NESPRÁVNÉ HESLO!"
End If
Else
MsgBox "NEEXISTUJÍCÍ UŽIVATEL!"
End If
Else
MsgBox "PROSÍM VYPLŇTE VŠECHNA POLE"
End If
Unload Me
End Sub
Private Sub subSetSheets(ByVal sSheets As String)
sSheets = "#" & Replace$(sSheets, ";", "#;#") & "#"
Dim sh As Worksheet
For Each sh In ThisWorkbook.Sheets
If InStr(sSheets, "#" & sh.Name & "#") = 0 Then
sh.Visible = xlSheetVisible
Else
sh.Visible = xlVeryHidden
End If
Next sh
Set sh = Nothing
End Sub
Určitě to jde ještě zjednodušit, ale to není téma.
Otestovat nemohu, ale principPrivate Sub CommandButton1_Click()
Dim UserName As String
Dim Password As String
UserName = TextBox1.Value
Password = TextBox2.Value
If UserName = "" Or Password = "" Then
MsgBox "PROSÍM VYPLŇTE VŠECHNA POLE"
Exit Sub
End If
RowCounter = 2
Do
If UserName = Sheets("UserData").Cells(RowCounter, 1).Value Then
If Password = Sheets("UserData").Cells(RowCounter, 2).Value Then
Role = Sheets("UserData").Cells(RowCounter, 3).Value
Exit Do
Else
MsgBox "NESPRÁVNÉ HESLO!"
Exit Sub
End If
ElseIf Sheets("UserData").Cells(RowCounter, 1).Value = "" Then
MsgBox "NEEXISTUJÍCÍ UŽIVATEL!"
Exit Sub
End If
RowCounter = RowCounter + 1
Loop
Application.ScreenUpdating = False
Select Case (Role):
Case ("MASTER"):
Call subSet_1
Case ("OSTAT"):
Call subSet_2
Case ("OSOUKR"):
Call subSet_3
End Select
Application.ScreenUpdating = True
Unload Me
End Sub
Private Sub subSet_1()
Sheets("START").Visible = True
Sheets("PL_T").Visible = True
Sheets("PL_TS").Visible = True
Sheets("1").Visible = True
Sheets("2").Visible = True
Sheets("3").Visible = True
Sheets("4").Visible = True
Sheets("5").Visible = True
Sheets("6").Visible = True
Sheets("7").Visible = True
Sheets("8").Visible = True
Sheets("9").Visible = True
Sheets("10").Visible = True
Sheets("11").Visible = True
Sheets("1S").Visible = True
Sheets("2S").Visible = True
Sheets("3S").Visible = True
Sheets("4S").Visible = True
Sheets("5S").Visible = True
Sheets("6S").Visible = True
Sheets("7S").Visible = True
Sheets("8S").Visible = True
Sheets("9S").Visible = True
Sheets("10S").Visible = True
Sheets("11S").Visible = True
Sheets("R").Visible = True
Sheets("R1").Visible = True
Sheets("R2").Visible = True
Sheets("O1").Visible = True
Sheets("O2").Visible = True
Sheets("O3").Visible = True
Sheets("O4").Visible = True
Sheets("O5").Visible = True
Sheets("O6").Visible = True
Sheets("O7").Visible = True
Sheets("O8").Visible = True
Sheets("O9").Visible = True
Sheets("O10").Visible = True
Sheets("O11").Visible = True
Sheets("O12").Visible = True
Sheets("O13").Visible = True
Sheets("O14").Visible = True
Sheets("O15").Visible = True
Sheets("O16").Visible = True
Sheets("O17").Visible = True
Sheets("O18").Visible = True
Sheets("O19").Visible = True
Sheets("O20").Visible = True
Sheets("DATA").Visible = True
Sheets("INPUT").Visible = True
Sheets("CF_M").Visible = True
Sheets("CF_T").Visible = True
Sheets("C").Visible = True
Sheets("C_P").Visible = True
Sheets("O1").Visible = True
Sheets("UserData").Visible = True
Sheets("START").Select
Range("B2").Select
End Sub
Private Sub subSet_2()
Sheets("START").Visible = xlVeryHidden
Sheets("PL_T").Visible = xlVeryHidden
Sheets("PL_TS").Visible = xlVeryHidden
Sheets("1").Visible = xlVeryHidden
Sheets("2").Visible = xlVeryHidden
Sheets("3").Visible = xlVeryHidden
Sheets("4").Visible = xlVeryHidden
Sheets("5").Visible = xlVeryHidden
Sheets("6").Visible = xlVeryHidden
Sheets("7").Visible = xlVeryHidden
Sheets("8").Visible = xlVeryHidden
Sheets("9").Visible = xlVeryHidden
Sheets("10").Visible = xlVeryHidden
Sheets("11").Visible = xlVeryHidden
Sheets("1S").Visible = xlVeryHidden
Sheets("2S").Visible = xlVeryHidden
Sheets("3S").Visible = xlVeryHidden
Sheets("4S").Visible = xlVeryHidden
Sheets("5S").Visible = xlVeryHidden
Sheets("6S").Visible = xlVeryHidden
Sheets("7S").Visible = xlVeryHidden
Sheets("8S").Visible = xlVeryHidden
Sheets("9S").Visible = xlVeryHidden
Sheets("10S").Visible = xlVeryHidden
Sheets("11S").Visible = xlVeryHidden
Sheets("R").Visible = xlVeryHidden
Sheets("R1").Visible = xlVeryHidden
Sheets("R2").Visible = xlVeryHidden
Sheets("O1").Visible = True
Sheets("O2").Visible = True
Sheets("O3").Visible = True
Sheets("O4").Visible = True
Sheets("O5").Visible = True
Sheets("O6").Visible = xlVeryHidden
Sheets("O7").Visible = xlVeryHidden
Sheets("O8").Visible = xlVeryHidden
Sheets("O9").Visible = xlVeryHidden
Sheets("O10").Visible = xlVeryHidden
Sheets("O11").Visible = xlVeryHidden
Sheets("O12").Visible = xlVeryHidden
Sheets("O13").Visible = xlVeryHidden
Sheets("O14").Visible = xlVeryHidden
Sheets("O15").Visible = xlVeryHidden
Sheets("O16").Visible = xlVeryHidden
Sheets("O17").Visible = xlVeryHidden
Sheets("O18").Visible = xlVeryHidden
Sheets("O19").Visible = xlVeryHidden
Sheets("O20").Visible = xlVeryHidden
Sheets("DATA").Visible = xlVeryHidden
Sheets("INPUT").Visible = xlVeryHidden
Sheets("CF_M").Visible = xlVeryHidden
Sheets("CF_T").Visible = xlVeryHidden
Sheets("C").Visible = xlVeryHidden
Sheets("C_P").Visible = xlVeryHidden
Sheets("UserData").Visible = xlVeryHidden
Sheets("O1").Select
Range("A1").Select
End Sub
Private Sub subSet_3()
Sheets("START").Visible = xlVeryHidden
Sheets("PL_T").Visible = xlVeryHidden
Sheets("PL_TS").Visible = xlVeryHidden
Sheets("1").Visible = xlVeryHidden
Sheets("2").Visible = xlVeryHidden
Sheets("3").Visible = xlVeryHidden
Sheets("4").Visible = xlVeryHidden
Sheets("5").Visible = xlVeryHidden
Sheets("6").Visible = xlVeryHidden
Sheets("7").Visible = xlVeryHidden
Sheets("8").Visible = xlVeryHidden
Sheets("9").Visible = xlVeryHidden
Sheets("10").Visible = xlVeryHidden
Sheets("11").Visible = xlVeryHidden
Sheets("1S").Visible = xlVeryHidden
Sheets("2S").Visible = xlVeryHidden
Sheets("3S").Visible = xlVeryHidden
Sheets("4S").Visible = xlVeryHidden
Sheets("5S").Visible = xlVeryHidden
Sheets("6S").Visible = xlVeryHidden
Sheets("7S").Visible = xlVeryHidden
Sheets("8S").Visible = xlVeryHidden
Sheets("9S").Visible = xlVeryHidden
Sheets("10S").Visible = xlVeryHidden
Sheets("11S").Visible = xlVeryHidden
Sheets("R").Visible = xlVeryHidden
Sheets("R1").Visible = xlVeryHidden
Sheets("R2").Visible = xlVeryHidden
Sheets("O1").Visible = xlVeryHidden
Sheets("O2").Visible = xlVeryHidden
Sheets("O3").Visible = xlVeryHidden
Sheets("O4").Visible = xlVeryHidden
Sheets("O5").Visible = xlVeryHidden
Sheets("O6").Visible = True
Sheets("O7").Visible = True
Sheets("O8").Visible = True
Sheets("O9").Visible = True
Sheets("O10").Visible = True
Sheets("O11").Visible = True
Sheets("O12").Visible = True
Sheets("O13").Visible = True
Sheets("O14").Visible = True
Sheets("O15").Visible = True
Sheets("O16").Visible = True
Sheets("O17").Visible = True
Sheets("O18").Visible = True
Sheets("O19").Visible = True
Sheets("O20").Visible = True
Sheets("DATA").Visible = xlVeryHidden
Sheets("INPUT").Visible = xlVeryHidden
Sheets("CF_M").Visible = xlVeryHidden
Sheets("CF_T").Visible = xlVeryHidden
Sheets("C").Visible = xlVeryHidden
Sheets("C_P").Visible = xlVeryHidden
Sheets("UserData").Visible = xlVeryHidden
Sheets("O6").Select
Range("A1").Select
End Sub
Jste šikovný. To musí být šíleně přehledné.
Rozdĕlte proceduru na více a pod tlačítkem postupně zavolejte všechny části-procedury.
Já jen k tomu druhému. Vlastně jste si v bodě 1 odpověděl sám.
Takže 1 je správně.
Navíc ta data vložte do tabulky (Vložení - Tabulka). Pak už se nebudete muset starat o nic, jen o přidávání dat.
Jaký je důvod mít to ve dvaceti listech?
Edit:
A k tomu prvnímu - podívejte se na podmíněné formátování
Čemu přesně nerozumíte?
Do toho "delšího" seznamu (který obsahuje i již nepoužívané záznamy) použijte fci COUNTIF a rozkopírujte dolů. Když vrátí 0, tak je to záznam ke smazání.
Nasměroval jsem vás, na internetu najdete spoustu návodů, jak fci použít, přijde mi zbytečné to tu zase psát.
COUNTIF
@elninoslov
vaše ne, tam to počítá správně - pokud tedy před tabulku nevložíte sloupec (posunete ji o jeden sloupec doprava). Pak ne. Proto to moje ISEVEN (nebo ISODD) - je to univerzitální
Možná tomu nerozumím, ale nestačí takto?:=SUMIF($F$7:$N$22;$D27;$G$7:$O$22)
Pořád platí, co píše xlnc
Univerzálně - maticově=SUMA($H$7:$P$22*($G$7:$O$22=$D27)*(ISEVEN(SLOUPEC($G$7:$O$22))=ISEVEN(SLOUPEC($G$7))))
Poznámka:
To, co navrhují ostatní bude fungovat, ale pouze do 31 dní (směn)...
Takže záleží na okolnostech ;)
=USEKNOUT(E3/7,5*24)&HODNOTA.NA.TEXT(MOD(E3;ČAS(7;30;0));"\d\ hh:mm")
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.