Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  174 175 176 177 178 179 180 181 182   další » ... 287

Nemôžete testovať len Controls. Veď tá podstránka je Page, nie Control. Teda musíte prejsť všetky Pages v objekte ktorý má typ MultiPage, a v každom cykle kontrolovať Controls až v tej Page. Ale vidím, že sa jedná o niekoľkonásobné vnorenie MultiPage, teda bude potrebné urobiť rekurzívnu metódu. Zvládnete to ?

Pre prepočet viac ako jednej bunky:
Selection = Evaluate("=" & Selection.Address & "*1.852")

a pre prepočet viac ako jednej bunky, ale s ničnerobením keď je prázdna:
Selection = Evaluate("=IF(" & Selection.Address & "="""",""""," & Selection.Address & "*1.852)")

Samozrejme sa bavíme o súvislej oblasti (viacriadkovej alebo viacstĺpcovej alebo oboje), nie o oblasti "hocikde". Ak chcete tak, povedzte, tam sa musí urobiť cyklus pre všetky podoblasti Areas.

EDIT: Pre hocijakú oblasť nesúvislú, to je fuk, mení iba čísla, prázdne a nečíselné bunky nie:
Sub PrevodAreas()
Dim ARE As Range, Adr As String
For Each ARE In Selection
Adr = ARE.Address
ARE = Evaluate("=IF(ISNUMBER(" & Adr & ")," & Adr & "*1.852," & Adr & ")")
Next ARE
Set ARE = Nothing
End Sub

lopi007: on testuje či je Outlook otovrený obdobne:
...
On Error Resume Next
Set OutlApp = GetObject(, "Outlook.Application")
If Err Then
Set OutlApp = CreateObject("Outlook.Application")
IsCreated = True
End If
OutlApp.Visible = True
On Error GoTo 0
...


Nomi: "...se to zasekne..." - Na ktorom riadku ?

Skôr si myslím, že je problém v tom čo sa tu spomínalo len pár týždňov dozadu (sa mi nechce hľadať tú tému), a to, že staršie Office pristupujú k obj. modelu Outlook inak.

Dim objOL as Object
Set objOL = CreateObject("Outlook.Application")

vs
Dim objOL as Outlook.Application
Set objOL = New Outlook.Application

Prípadne pridať referenciu na Microsoft Outlook xx.x Object Library.

Mne to na Office 2016 funguje, tak ako chcete. Akú máte verziu, možno tam bude problém.

Trochu sa nad tým pozastavujem, lebo neviem načo pridávať ďalší riadok každý deň. Veď keď prídem po max 31 tak musím pridať nový stĺpec každý mesiac. Teda určite nezačínam ďalší mesiac na 32-om dátovom riadku. Ja by som si vytvoril 31 riadkovú tabuľku, nešpekuloval s pridávaním riadkov a vypĺňaním vzorcov, ale vzorce by som ošetril napr. na nevypisovanie hodnoty, a pridával by som len mesiac - teda stĺpec. V prvom momente ma to netrklo, ale teraz v tom pridávaní riadkov nevidím logiku.

Range má režim R1C1, alebo namiesto neho použite Cells(riadok,stlpec), k tomu napr. .Offset() alebo .Resize(). Skúste sa na to mrknúť vlastnými silami, no ak to nedáte, tak niekto pomôže. Keď nebudem na mobile... Jáj a ešte, ktorý riadok sa dá spoĺahlivo použiť na určenie posledného stĺpca ? Riadok 8 ?

Tak ako to popisujete, tak to funguje, bez poškodenia nezobrazených riadkov. Rovnako ako aj napísanie jednej hodnoty a ťahanie za roh.

Tak skúste toto, je to na zmenu v stĺpci K. Vidím, že asi budete chcieť po odoslaní preniesť 0 riadky do druhého listu, to už zvládnete.

Určite ? Mne to fachá na všetky súbory, či už XLS, XLSX, XLSM, otvárané priamo, otvárané z archívu. Nič nepadá, robí to to čo má, kopíruje ten dátum.
-určite máte v XLSB aj tú triedu definovanú v ThisWorkbook ?
-v samotnej triede cExcelEvents si už iba zamente ten msgbox Hello za Váš kód. Ja som to urobil za Vás tu to máte.
-Uložil ste ten XLSB po úprave?

-pozatvárajte Excel
-zálohujte si Váš XLSB súbor bokom. Nahraďte ho týmto v adresári
c:\Users\Vaše_meno\AppData\Roaming\Microsoft\Excel\XLSTART\

Kto nechce sťahovať tak:
V XLSB - ThisWorkbook
Option Explicit

Private XLApp As cExcelEvents
Private Sub Workbook_Open()
Set XLApp = New cExcelEvents
End Sub

V XLSB - cExcelEvents
Option Explicit

Private WithEvents App As Application
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

'// Prevent message when this workbook is opened
If Wb.Name <> ThisWorkbook.Name Then
'MsgBox ("Hello")
Range("C2").Select
ActiveCell.FormulaR1C1 = "7/25/2017"
Range("C2").Select
Selection.NumberFormat = "yyyy/mm/dd"
Range("C2").Select
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
End If

End Sub

Malo by to ísť cez triedu:

EDIT: Ale s vykonaním zmiem pri otvorení "každého zošitu" by som bol veľmi opatrný, a poriadne ošetril ako má makro zistiť, či sa jedná o vhodný zošit. Vaše makro na vkladanie dátumov nenávratne zničí celé stĺpce C v akomkoľvek zošite. Uvedomujete si to dúfam.

Ak je príloha xlsm, musíte ju zabaliť do ZIP/RAR, a nesmie byť väčšia ako 256KB. Ak sa nezmestí, uploadnite ju niekde na Free úložisko a dajte odkaz.

Tak potom aj takto sa dá, a definovaným názvom ľahko nahradíte A1:A5 dynamickou oblasťou.
=(MAX(A1:A5)-MIN(A1:A5))/(COUNTA(A1:A5)-1)
=(MAX(A1:A5)-MIN(A1:A5))/(POČET(A1:A5)-1)

Pre podstatné zjednodušenie (netreba dopĺňať vzorec s podmienkou) je to ako Tabuľka, nie tabuľka. Na toto makro nepotrebujete. Ten klik na filter v hlavičke Tabuľky v stĺpci s podmienkou zvládnete aj bez makra. Podmienka je v skrytom stĺpci AK, to si kľudne odkryte. Filtrovaná hodnota sa berie z bunky AN1, ak tam nič nieje filtrujú sa len prázdne riadky (prázdnym riadkom sa rozumie taký v ktorom sa v uvedených stĺpcoch nič nenachádza). Oblasť tlače je nastavená na A:AJ. Tie 3 riadky kódu som Vám tam napísal, ale nepotrebujete ich.

Flintu do žita len tak nehádžem, ale pri Vás ju tuším aj zakopem :)
Tak ešte raz, dokola, čo so Vám písal minule, aj predminule s kontrolou 0 a 1 ...

Makro nedostane žiadnu indíciu o tom, že sa zmenila nejaká bunka vzorcom. Makro dostane iba informáciu, že sa prepočítava celý list - procedúra Calculate. Makro netuší nič o Vašej požadovanej informácii, či sa zmenila niektorá bunka v A na 0.

Preto som sa Vás minule pýtal, čo spôsobuje zmenu. Nepozerajme sa teraz vôbec na stĺpec A. Kašle naň pes. Je to výsledok podľa buniek J a K. Teda otázka znie :
Čo spôsobuje zmenu v J a K ? Je tam vzorec, alebo tam vpisuje hodnoty makro či Vy ručne ?

Ak je tam vzorec, tak aký ? Pozrime sa na bunky v tom vzorci, a nájdime takú ktorú mení makro alebo Vy. Prečo ? Lebo ak je zmenená nejaká hodnota makrom alebo Vami, tak VBA dostane indíciu, ktorá presne bunka bola zmenená. A keď budeme vedieť, ktorá bola zmenená, začneme podľa vzorcov v J a K (alebo v iných stĺpcoch, neviem kam až sa dostaneme po manuálne zapisovanú hodnotu), podľa náväznosti vypočítavať, čo je v A.

A sme doma, lebo zistíme, že bola vlastne v konečnom dôsledku zmenená 0 v A.

Chápete?

Ak totiž nikde nebudete vkladať ručne hodnotu, ale všetko čo je naviazané na A bude iba vzorcami, napadá ma okrem toho čo som Vám písal minule (nechať niekde v liste kópiu starých dát a pri každej Calculate ju kontrolovať - pomalé), ešte možnosť pri otvorení súboru načítať do Poľa tabuľku z listu, a pri každom Calculate kontrolovať - tiež pomalé, ale rýchlejšie ako kontrolovať všetky bunky v liste.

Ak to nezistíte, ktorá bunka bola zmenená, tak Vám bude makro v Calculate odosielať mail neustále, aj pri zmene bunky v B alebo C, proste ktorejkoľvek, nie iba v A, ako potrebujete!

Chápeme sa, ale bo zase nič ?

Teda teraz napíšte, čo je v J a v K, ak je tam niekde vzorec, napíšte čo je v bunkách použitých vo vzorci, ... opakujte až kým neprídete po nejakú bunku menenú bez vzorca.

Príklad:
Sub NastavHlavisku()
Dim S As String, Vyska As Single
S = InputBox("Zadej výšku řádku v rozmezí 12-40", "Výška písma", 12)
If Not IsNumeric(S) Then MsgBox ("Chyba !"): Exit Sub
Vyska = Val(S)
If Vyska < 12 Or Vyska > 40 Then MsgBox ("Nesprávna veľkosť"): Exit Sub
ActiveSheet.PageSetup.LeftHeader = "&" & Vyska & Sheets("tiskZmenyZahlavi").Range("B3")
End Sub

Za ActiveSheet bude ten list na ktorý sa odkazujete cez With, a ten "tiskZmenyZahlavi" je asi iba zdroj textu...


Strana:  1 ... « předchozí  174 175 176 177 178 179 180 181 182   další » ... 287

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