Příspěvky uživatele


< návrat zpět

Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 16

Pokusil jsem se něco nasimulovat.
Ano ve zdrojovém souboru dat se aktualizují pouze vybrané řádky podle ID jednotlivých záznamů.
Ano souvisí to částečně s tím tématem - ale je to jiná funkcionalita.

Popisy sloupců a počet jsou neměnné, slKonec=poslední použitý sloupec (ID záznamu).

Ovládací soubor má více funkcionalit pro různé typy uživatelů, kteří k němu přistupují (celkem cca 40-50 uživatelů s různými požadavky). Zjednodušeně lze definovat skupiny uživatelů jako zadavatel, servis, vystupní kontrola, fakturace.
Každá skupina uživatelů ovlivňuje jiný sloupec, ale pro celkový přehled zpracování dat je pro všechny uživatele stejný náhled na data prostřednictvím "Ovládacího" souboru.

EDIT:
na listu jsou pouze hodnoty, datové typy jsou ošetřeny individuálné (vím co umí excel s datovými typy provést 5 ).

Funkční, takže fígl je v tom, že se nejprve načte celá oblast a následně se převedou pouze viditelné řádky oblasti z pole všech záznamů podle čísla řádku.
Jen mi hlava nebere proč Set rngFilter = .SpecialCells(xlCellTypeVisible)nevybere celou nesouvislou oblast dat, ale vždy jen první řádek oblasti.

Dík

EDIT:
domnívám se, že cyklusFor i = 1 To rngArea.Rows.Count
bude zbytečný, protože rngArea bude obsahovat vždy právě jeden řádek. Nebo se pletu?

Počet sloupců se může měnit, avšak žádné sloupce nebudou nikdy skryty.
Spíše jde o to, že rngFilter.Columns(1)vrací pouze jeden řádek dat, místo 3 v ukázce.

Dobrý den,
nedaří se mi vytvořit makro, které by načetlo vybrané (filtrované) řádky do pole.
Načte se mi vždy pouze jeden řádek z výběru.
Díky

Díky za zjednodušení výpočtu.
Ano pojmem pole myslím VBA Array
jde o problematiku změny dat ve společném souboru na základě změny provedené u jednotlivce
zatím řešeno přes pole hodnot, které se přepisují do "společného" souboru (jakoby databáze).
pocet = Intersect(Selection.Parent.Columns(1), Selection.EntireRow).Cells.Count

ReDim aZaznam(pocet - 1, slKonec - 1)

For idx = 0 To UBound(aZaznam)
For i = 0 To slKonec - 1
aZaznam(idx, i) = "none" ' naplnění pole "bez změny"
Next i
Next idx

pocet = 0
For Each oblast In Selection.EntireRow.Areas
For Each radek In oblast.Rows
If Not radek.Hidden Then
hodnota = Cells(radek.Row, slZmena)
' změna hodnoty na opačnou
If hodnota = "ANO" Then
aZaznam(pocet, slZmena - 1) = "NE"
Else
aZaznam(pocet, slZmena - 1) = "ANO"
End If
aZaznam(pocet, slKonec - 1) = Cells(radek.Row, slKonec) ' ID měněného zázanmu
pocet = pocet + 1
End If
Next radek
Next oblast

na základě tohoto pole je pak následně aktualizován zdrojový soubor dat a aktualizují se pouze opravdu změněné hodnoty.
Zatím jsem nepřišel na lepší způsob sdílení dat s použitím maker a kontrol aniž by došlo ke konfliktu sdílení nebo ztráty dat.

Super.
Díky
Edit
Lze jednoduše vyplnit pole konkrétními hodnotami z řádku v jednom cyklu aniž bych znal předem velikost pole?

idx=0
For Each oblast In Selection.EntireRow.Areas
For Each radekX In oblast.Rows
If Not radekX.Hidden Then
' zde např.
poleHodnot(idx,0)= hodnota1
poleHodnot(idx,1)= hodnota2
idx=idx+1
' ...
End If
Next radekX
Next oblast

Dobrý den,
potřebuji vypočítat počet řádků ve výběru oblasti dat označených uživatelem
For i = 1 To Selection.Rows.Count
If Not Selection.Rows(i).Hidden Then
pocet = pocet + 1
End If
Next i
vrátí správný počet vybraných řádků v souvislé oblasti dat i když je zapnutý filtr

Pokud však bude označena nesouvislá oblast dat, výsledek vrátí pouze počet první souvislé oblasti a další je ignorována.
Oblast na obrázku vrátí tímto algoritmem pouze pocet=7.

Jak vypočítat všechny vybrané řádky?
Díky za nakopnutí.

5
bejkárna, ale dala mi dost zabrat v lovení a hledání příčiny

ThisWorkbook.Windows(1).Visible = True
jen netuším, kde nastal opak ...

Tak kdyby náhodou to někomu taky udělalo problémy.

Dobrý den,
co zapříčiní, že po otevření souboru excelu nejsou viditelné jednotlivé listy? Viz screeny v příloze

Nějak si už nevím rady jak zviditelnit listy. Soubor byl otevírán metodou GetObject(soubor).

Anonym napsal/a:

Uživatelsky nepřívětivé, ale funkční

ActiveWorkbook.RefreshAll
MsgBox "Pokračuj..."
Calculate


Pokud vadí ta hláška, což by mě vadila, zkuste
Application.ScreenUpdating = False
ActiveWorkbook.RefreshAll
With Application
.Wait (Now + TimeSerial(0, 0, 0.2)) ' čeká 0,2 sec
.Calculate
.Application.ScreenUpdating = True
End With

Možnost je např. zobrazit zprávu v prohlížeči a pak si prohlédnout zdrojový kód.
Ale připravte se na spoustu balastu. ...

Mělo by pomoci vcelku jednoduché řešení.
Ve ForEach smyčce na všemi listy posílat tisk vždy toho konkrétního listu.
Domnívám se, že to by si měla tiskárna obsloužit v pohodě.

Je to vlastně obdoba jako když budete ručně procházet každý list a ten samostatně tisknout.

Dim list As Worksheet
For Each list In WorkSheets
list.PrintOut
Next

Pánové, s velkým zájmem jsem si přečetl celou tuto konverzaci, která by měla být poučením pro všechny.

Velice se přikláním k názorům Stalker a Al. Vážím si práce elninoslov, ale bohužel odvádí pro mnohé medvědí služby - což ostatně velice výstižně popsal Al.
Dnes a denně se s obdobnými problémy potýkám v zaměstnání, někdo chce radu, ale není schopen odpovědět na základní otázky, či navrhnout varianty jak by danou problematiku řešil. Takovým to osobám je jakákoliv poskytnutá rada na dvě věci, sice to pravděpodobně udělají podle doporučení (a nebo také ne a to je pak mnohem horší), ale druhý den chtějí poradit s tím samým problémem.
Co z toho plyne? Pokud se dotyčný nějakým způsobem nezapojí do řešení jeho problému je jakákoliv rada zbytečná.
Udělat to za něj? Sice to vyjde časově méně náročněji, ale nic se nezmění. Tazatel může 100x uvést, že se chce něco naučit, ale pokud se nezapojí nenaučí se nic.

Nikdy mi nejde o čas strávený při pomoci druhým, ale o výsledný efekt, potažmo efektivnost vynaloženého úsilí.
10

Děkuji za tuto diskuzi.

Edit:
vůbec by nebylo od věci občas pročít http://wall.cz/index.php?m=topic&id=8351

Stalker napsal/a:

O Žádnou chybu se nejedná....

Proč bez problémů Workbooks(zdrojSesit).Worksheets(zdrojList).Range("A1:AH122").Copy _

Workbooks(cilSesit).Worksheets(cilList).Range("A1")
projde???

náhradou Range("A1:AH122") za Range(Cells(1,1),Cells(122,34))) zhavaruje?
Range(Cells(1,1)) není až taková zhovadilost, ale souhlasím, postačuje Cells(1,1)

Borek0495 napsal/a:

A když to budu chtít ještě trochu zesložitit,...

S použitím výše uvedeného třeba:
Sub VytvorAdresar()

Dim A As String
Dim B As String
Dim C As String
Dim i As Long

A = "C:\Users\JF\Desktop\wall\"

For i = 1 To 100
B = Cells(i, 1)
If B <> Empty Then
If Len(Dir(A & B, vbDirectory)) = 0 Then
MkDir A & B
' MsgBox "Adresář vytvořen."
Else
MsgBox "Adresář " & B & " již existuje."
End If

C = Cells(i, 2)
If C <> Empty Then
If Len(Dir(A & B & C, vbDirectory)) = 0 Then
MkDir A & B & C
' MsgBox "Podadresář vytvořen."
Else
MsgBox "Adresář " & B & C & " již existuje."
End If
End If
End If
Next i

MsgBox "Hotovo"

End Sub


Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 16

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