< návrat zpět

MS Excel


Téma: Načtení dat do formuláře rss

Zaslal/a 25.11.2013 12:59

Zdrávím, opět potřebuji trošku pomoci.
V přiloženém sešitu se vkládají makrem data z listu Nabídka_im do listu Nabídka.
Vše je OK, jen bych potřeboval, aby se vkládaná data do formuláře vložila za již existující položky. Zatím je to tak, že se fixně vloží od 24 řádku.
Budu-li mít tedy nějaké položky ve formuláři a budu chtít provést import dat z listu Nabídka_im, tak se data z importu vloží za již obsazené řádky. Kontrola obsazenosti by se měla provést ve sloupci C (Název položky) jelikož ostatní údaje na řádku nemusejí být vyplněny.
Pomůže někdo? Díky M.

Zaslat odpověď >

Strana:  1 2   další »
#016519
avatar
No a koukám, že nefunguje vkládání příloh...zkusím přiložit pozdějicitovat
#016520
avatar
napriklad takto:

prva moznost:
aa = cells(1,1).End(xlDown).row +1

druha moznost:
With Cells(2, 1).CurrentRegion
aa = .Rows(.Rows.Count).Row + 1
End Withcitovat
#016521
avatar
Přikládám alespoň kód, pokud by někdo chtěl vystřelit na slepo:

Private Sub CommandButton3_Click()
For x = 24 To 124
With Sheets("Nabídka_im")
If .Cells(x, 2) = "" And .Cells(x, 3) = "" And .Cells(x, 8) = "" And .Cells(x, 9) = "" And .Cells(x, 10) = "" And .Cells(x, 11) = "" And .Cells(x, 12) = "" Then Exit For
Cells(x, 2) = .Cells(x, 2)
Cells(x, 3) = .Cells(x, 3)
Cells(x, 8) = .Cells(x, 8)
Cells(x, 9) = .Cells(x, 9)
Cells(x, 10) = .Cells(x, 10)
Cells(x, 11) = .Cells(x, 11)
Cells(x, 12) = .Cells(x, 12)
End With
Next
Dim rRowsToHide As Range

Dim i As Integer
For i = 124 To 24 Step -1
If IsEmpty(Cells(i, 3)) And IsEmpty(Cells(i - 1, 3)) Then
If rRowsToHide Is Nothing Then
Set rRowsToHide = Cells(i, 3)
Else
Set rRowsToHide = Union(rRowsToHide, Cells(i, 3))
End If
Else
Exit For
End If
Next

If Not rRowsToHide Is Nothing Then
rRowsToHide.EntireRow.Hidden = True
End If

Set rRowsToHide = Nothing

End Sub
citovat
#016522
avatar
Palooo, bohužel nevím kam zařadit a co nahradit:-(citovat
#016523
avatar
podrobne som to nestudoval pockam si na file :) ... ale vypada to ze to len schovava riadky nic tam nedoplnujujecitovat
#016527
avatar
Zkus změnit začátek takhle:
posled = Cells(Rows.Count, "C").End(xlUp).Row
For x = 24 To 124
With Sheets("Nabídka_im")
If .Cells(x, 2) = "" And .Cells(x, 3) = "" And .Cells(x, 8) = "" And .Cells(x, 9) = "" And .Cells(x, 10) = "" And .Cells(x, 11) = "" And .Cells(x, 12) = "" Then Exit For
Cells(posled + x - 23, 2) = .Cells(x, 2)
Cells(posled + x - 23, 3) = .Cells(x, 3)
Cells(posled + x - 23, 8) = .Cells(x, 8)
Cells(posled + x - 23, 9) = .Cells(x, 9)
Cells(posled + x - 23, 10) = .Cells(x, 10)
Cells(posled + x - 23, 11) = .Cells(x, 11)
Cells(posled + x - 23, 12) = .Cells(x, 12)
End With
Next
a pak už asi beze změny.citovat
#016531
avatar
radsej by som pouzil druhu moznost

moze sa stat ze nejaka bunka bude prazna a xldown skonci nanej preto je lepsia druha moznost:

With Cells(2, 1).CurrentRegion
aa = .Rows(.Rows.Count).Row + 1
End Withcitovat
#016537
avatar
Děkuji za typ, ale nepodařilo se mě uplatnit ani jedno řešení. Pravděpodobně vkládám nějak špatně. Hotové řešení od Dinga jsem vložil, ale nejde. Prosím o kontolu a doladění...
Dále jsem u tohoto mého kódu narazil na jeden zásadní problém. Toto je zkušební soubor, ale v ostré firemní verzi mám oblast nastavenou na 500 řádků a překopírování pouhých 200 položek zabere 12minut(Možná to bude počítačem, ale 4MB RAM a Visty by to měli pobrat v pohodě, ale spíše to bude velikostí sešitu cca 25MB, nevím). Nešlo by to vyřešit tím, že by se v listu Nabídka_im(zdroj) vybrala/označila pouze část formuláře kde jsou hodnoty a to od 1 řádku(fixně) formuláře do posledního obsazeného řádku (číslo posledního řádku se bude měnit) ve formuláři a tento výběr by se následně vložil do listu Nabídka (cíl) jako celek?
Možná si říkáte, proč neskopírovat celý formulář a nevložit jej do identického formuláře na jiném listu. Toto jsem zkoušel, jenže na cílovém listu mám jiné makro, které skrývá prázdné řádky a pokud to tam nakopíruji, tak se i prázdná buňka tváří jako obsazená a to další makro už nejde uplatnit:-(
Bude to asi oříšek, ale budu rád za každý nápad jak tuto procedůru urychlit. Omlouvám se za román:-)Díky moc M.
Příloha: zip16537_databaze3.zip (111kB, staženo 26x)
citovat
#016540
avatar
To mé řešení fungovalo na mém testovacím souboru, na tvém opravdu NE.
Něco jsem zkusil, kopíruju celou oblast z listu nabídka_im a upravil jsem to skrytí řádků. Na listu nabídka_im mohou být prázdné řádky mezi daty? Není ošetřené to, když řádků bude moc a na listu Nabídka polezou za 124.
Příloha: zip16540_databaze.zip (122kB, staženo 29x)
citovat
#016541
avatar
Díky moc Dingo,
otestoval jsem to a nyní je to o dost rychlejší což je úplně super:-). Jen musím vymyslet nějakou stopku, aby se vkládaná oblast nepřelézala za hranici formuláře, nebo budu muset manuálně zkontrolovat zda se zdrojová oblast do furmuláře ještě vejde, což bude trošku oříšek to přepočítávat.
Napadlo mě, ale asi to sám nedám, převážně se bude vkládat ze zdroje 10 položek max, šlo by tedy zjistit na začátku importu kolik je volných řádků ve formuláři Nabídka a pokud by to bylo méně než deset, tak že by se celý import přerušil s hláškou př. "Ve formuláři již není místo pro zápis"? Je to reálnécitovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

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.

On-line nástroje