Dingo, ja som hneď v prvom príspevku napísal kostru. Základ je skutočne v príkaze Shell. Bohužiaľ, pod Explorerom som rozumel IE nie Windows Explorer. K tomuto: asi by mělo být:
Shell strS & " " & Site, vbNormalFocus Ja napr. v ceste k .exe súboru prázdne znaky nemám, API call ich vo Win7 ale ponecháva na konci, proste strS ponecháva v dĺžke danej konštantou Adresare (100 znakov). Na XP to nerobilo, robí mi to na Win7, tak som potreboval ten reťazec prečistiť, bohužiaľ Trim nezafungoval, tak som použil Brutal Force cez Substitute. To samozrejme nefunguje v prípade, kedy v ceste k *.exe (v reťazci), sú prázdne znaky. Takže je potrebné to upraviť inak, čo samozrejme ide, napr. kombináciou Left a Instr. Úplné triviality ale riešiť nehodlám, to sa na mňa nikto hnevať nemôže, že si vyberám, čo a do akej miery doťahujem do konca, konieckoncov, radíme tu zadarmo
edit: kupodivu, teraz to funguje i takto:Sub test(Site As String)
Dim strS As String
Dim lngL As Long
Dim Prehliadac As String
'Prehliadac = "chrome.exe" 'pre chrome
Prehliadac = "TOTALCMD.EXE" 'pre Total Commander, Altab Salamander nemam, ale bude to analogicke
strS = String(Adresare, 0)
lngL = SearchTreeForFile("C:\", Prehliadac, strS)
If lngL <> 0 Then
Shell strS & " " & Site, vbNormalFocus
Else
MsgBox "Prehliadac nebol najdeny!", vbCritical
Exit Sub
End If
End Sub Fakt netuším, v čom bol predtým problém, že to tam nechávalo 100 znakov v tej ceste...
edit2: Aha, tak tých 100 znakov to ponecháva v prípade, že použijem ako prehliadač napr. chrome.exe, no to je fakt divné ale...
Záver: v prípade Total Commander príslušný riadok kódu má byť:
Shell strS & " " & Site, vbNormalFocus
,
v prípade chrome ale:
Shell Left(strS, InStr(strS, ".exe") + 3) & " " & Site, vbNormalFocus
Funguje mi to, poté, co jsem vynechal různé tanečky okolo zjištění cesty k souboru, kterým se má otevírat odkaz. Tanečky sú tam kvôli tomu, že cesta k súboru sa môže na rôznych počítačoch líšiť Písal som hneď na začiatku: Trochu univerzálnejšie (v prvom príklade by si totiž vždy musel dopredu určiť umiestnenie *.exe súboru príslušného prehliadača, ktoré sa logicky na rôznych počítačoch môže líšiť). Krom toho, môže sa líšiť i verzia prehliadača, v Tvojom prípade napr. 64bit. Holt, všetky eventuality neodchytím, poskytnem základ a adresát sa musí snažiť trochu sám, aby zistil, v čom je problém. Som trochu unavený z odpovedí v zmysle: "Nefunguje to, skús to znovu, keď ťa to baví, ja sa snažiť sám nebudem."
nemáš zač, si poradíš nakoniec sám, zdá sa
Klikni na B25 alebo B26 a povedz mi, či sa otvorí Total Commander, alebo nie.. Na mojom ntb sa totiž otvorí
Stále nerozumiem. Každopádne, pokiaľ potrebuješ získať počet záznamov zo všetkých tabuliek, tak:Sub GetNumberOfRecordsInAllTables()
Dim dbs As CurrentData, AccObj As AccessObject, Celkom As Long
Access.OpenCurrentDatabase "C:\Users\al057494\Desktop\Test.accdb"
Set dbs = Access.CurrentData
For Each AccObj In dbs.AllTables
If Not AccObj.Name Like "MSys*" Then
Debug.Print "Tabulka:"; AccObj.Name; Tab(50); "Pocet zaznamov:"; DCount("*", AccObj.Name)
Celkom = Celkom + DCount("*", AccObj.Name)
End If
Next AccObj
Debug.Print "Pocet zaznamov vo vsetkych tabulkach:"; Celkom
Access.CloseCurrentDatabase
End Sub Referencia na na objektovú knižnicu MS access (u mňa Microsoft Access 14.0 Object Library). Pokiaľ poznáš názvy tabuliek, tak cyklus si môžeš upraviť. Viac asi neporadím...
A prečo máš 24 tabuliek miesto jednej? Nie je možné tie záznamy zlúčiť do jednej tabuľky pomocou Append Query (inštrukcia INSERT INTO) alebo vytvoriť zjednocovací dotaz (inštrukcia UNION ALL) a nad tým potom vytvoriť výberový dotaz, kde vyberieš len záznamy, u ktorých hodnota je väčšia než priemer?
Ten třetí by se mi hodil nejvíc. Ale problém je v tom, že už "Test.accdb" mám otevřený "OpenDatabase" (ne Current). A DCount v tom prípade nefunguje? Neviem si úplne presne predstaviť, o čo sa snažíš a sám som v otázke VBA v Access zatiaľ veľký břídil. Inak klobúk dolu čo sa týka Tvojich pokrokov, mám za to, že si začal len pred pár dňami, mám pravdu?
edit: Pokiaľ máš nainštalovaný Access a máš problém so syntaxou dotazu vo VBA kóde, tak mne sa osvedčilo nasledujúce: Sám som si často neistý so správnou syntaxou dotazu, v takom prípade si ho cvične postavím v návrhovom zobrazení priamo v prostredí Access, následne sa prepnem do SQL zobrazenia, reťazec prekopírujem do VBA a tam iba doupravím...
Prípadne takto:Sub GetNumberOfRecordsDcount()
Access.OpenCurrentDatabase "C:\Users\al057494\Desktop\Test.accdb"
MsgBox DCount("*", "tblTest")
Access.CloseCurrentDatabase
End SubS príslušnou referenciou na objektovú knižnicu MS access (u mňa Microsoft Access 14.0 Object Library)
COUNT nie je nutný:Option Explicit
Sub GetNumberOfRecords()
Dim DbName As String, tblName As String, strSQL As String
Dim con As ADODB.Connection, rst As ADODB.Recordset
DbName = "C:\Users\al057494\Desktop\Test.accdb"
tblName = "tblTest"
Set con = New ADODB.Connection
con.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & DbName
Set rst = New ADODB.Recordset
strSQL = "SELECT * FROM " & tblName
rst.Open strSQL, con, adOpenStatic, adLockReadOnly
MsgBox rst.RecordCount
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End SubPokiaľ by si chcel predsa len využiť COUNT, tak takto:Option Explicit
Sub GetNumberOfRecordsWithCount()
Dim DbName As String, tblName As String, strSQL As String
Dim con As ADODB.Connection, rst As ADODB.Recordset
DbName = "C:\Users\al057494\Desktop\Test.accdb"
tblName = "tblTest"
Set con = New ADODB.Connection
con.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & DbName
Set rst = New ADODB.Recordset
strSQL = "SELECT COUNT(*) FROM " & tblName
rst.Open strSQL, con, adOpenStatic, adLockReadOnly
MsgBox rst.GetString
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub
Som rád, že Vám moja odpoveď pomohla, pekný deň prajem Mimochodom, keď už si teda udeľujeme lekcie zo slušného správania, tak by som očakával, že aspoň zmienite, či Vám pomohla moja rada tuná:http://wall.cz/index.php?m=topic&id=20244#post-20255. Nevšimol som si, že by ste sa obťažoval s odpoveďou.
http://www.gcflearnfree.org/word2010/24
http://lmgtfy.com/?q=mail+merge
@Pavlus
Domnievam sa, že si neporozumel zadaniu.
@Lucia
Riadky obsahujúce v stĺpci D hodnotu 1 predstavujú želaný výsledok. Môžeš si vyfiltrovať, eventuálne použiť rozšírený filter a výsledok vložiť niekam inam.
Aha. Pár poznámok teda. Kód, ktorý som dával, je funkčný na XP. Od minulého týždňa mám Win7 a kód som musel malinko upraviť. Časť sub test by vyzerala nasledovne:Sub test(Site As String)
Dim strS As String
Dim lngL As Long
Dim Prehliadac As String
'Prehliadac = "chrome.exe" 'pre chrome
Prehliadac = "TOTALCMD.EXE" 'pre Total Commander, Altab Salamander nemam, ale bude to analogicke
strS = String(Adresare, 0)
lngL = SearchTreeForFile("C:\", Prehliadac, strS)
If lngL <> 0 Then
Shell WorksheetFunction.Substitute(strS, Chr(32), "") & " " & Site, vbNormalFocus
Else
MsgBox "Prehliadac nebol najdeny!", vbCritical
Exit Sub
End If
End SubOstatné sa nemení, t.j. platí môj pôvodný príspevok. Som zvedavý, s čím prídeš za 3 týždne.
Na toto nie som najväčší odborník na svete, takže posielam síce pmn funkčný, ale asi nie optimálny pokus:Sub Copy_Ace_Table()
Dim dbAcc As String
Dim nTab As Long
dbAcc = ThisWorkbook.Path & "\" & "NewDB.accdb"
Access.OpenCurrentDatabase dbAcc
'Kopie TAB
For nTab = 2 To 11
DoCmd.CopyObject , nTab, acTable, 1
Next nTab
Access.CloseCurrentDatabase
MsgBox "HOTOVO", , "Copy_Ace_Table"
End Sub
Použil som early binding s referenciami viď obrázok
Keď zmením 0 za 1 tak mi to automaticky prehodí, ako pri nejakom IF. Ale to asi už nepôjde, Prečo by to nešlo? Nedá sa a neviem, ako sa dá sú dve rozdielne veci. Spôsobov, ako sa dá, je mnoho, napadá ma minimálne týchto pár hneď teraz:
1. Udalostné makro so zakomponovaným filtrovaním
2. Udalostné makro so zakomponovaným už zmieneným rozšíreným filtrom
3. Udalostné makro s využitím MS query
4. Udalostné makro s využitím cyklu, v ktorom budú do poľa načítané len položky spĺňajúce dané kritérium, následne z poľa nakopírované do cieľovej oblasti
5. Udalostné makro s využitím cyklu, v ktorom budú v prvom kroku vykopírované všetky vstupné hodnoty a následne v cykle určené položky nespĺňajúce dané kritérium, ktoré budú na záver z výsledku odstránené
6. Maticový vzorec
Uvediem riešenie cez maticový vzorec; pri rozložení dát rovnakom, ako uviedol vo svojom prípade Dingo, vyber bunky G2:G17 a vlož maticový vzorec: =IFERROR(INDEX(A2:A17; SMALL(IF(B2:B17=1;ROW(A2:A17)-1);ROW(A2:A17)-1)); "")P.S. Konštrukcia rozšíreného filtra, ktorú uviedol Dingo, môže byť tiež zjednodušená, ale to je detail, riešenie od Dinga funkčné je.
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.