Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Vkládání dat z Excelu do (cizího) webového formuláře

Na webu je formulář pro zadávání dat uživateli, kolonky obsahují datum, čísla a texty (asi 10 údajů).
V excelu mám na listu požadované údaje, ve stejném formátu, jako vyžaduje formulář. Ne jednou, ale za více případů, pěkně v tabulce.

Existuje nějaká možnost, jak data jednoho případu (řádku) dostat hromadně do onoho webového formuláře? Pokud k tomu webu mám přístup jen jako uživatel? Pokud bych to chtěl kopírovat v rámci Excelu, postupoval bych tak, že bych na příslušném řádku měl fokus a následným příkazem (makro) bych provedl kopírování z oné databáze do kolonek/buněk cílového listu.

Teď to můžu akorát otrocky po jedné "kolonce" copy/pastovat. Protože vím, že se jedná o docela kontroverzní postup, raději teď neuvedu cílový web. V případě potřeby mohu upřesnit v PM.

Moc tomu nevěřím, že to půjde, ale náhoda je blbec :-)

Díky za reakce.

Předmět Autor Datum
Nič lepšie, než toto, ma zatiaľ nenapadlo :-D Program načítava postupne všetky stĺpce prvého riadka…
robert13 30.11.2017 13:59
robert13
Tohle vypadá dobře, takto by mě to nenapadlo :) Akorát musí být připravena "definitivní" excel tabul…
L-Core 30.11.2017 14:57
L-Core
To samozrejme ide. Nie som na pc, takze ak ti to Siki do vecera neurobi, budes to tam mat odo mna cc…
robert13 30.11.2017 16:03
robert13
Riadok v Exceli bude odvodený z aktívnej bunky (je jedno, v ktorom stĺpci sa bude nachádzať aktívna…
robert13 30.11.2017 18:25
robert13
Díky moc! :beer:
L-Core 30.11.2017 19:16
L-Core
:beer:
robert13 30.11.2017 19:16
robert13
No tak pánové, nepleťte si to tady s hospodou! ;-) Tohle je seriózní server.
host 30.11.2017 19:18
host
:-D To patrí k slušnému úspešnému vyriešeniu problému ;-)
robert13 30.11.2017 19:23
robert13
OK, tak to si dám s váma! :beer:
host 30.11.2017 19:29
host
Ještě bych to potřeboval malinko vylepšit :-) - data, která potřebuji kopírovat na web, jsou ve slo…
L-Core 05.12.2017 17:09
L-Core
Sub ConsCopy() Riad = ActiveCell.Row Den = Range("I" & Riad).Value Dalsi: If Range("A" & Riad) = ""…
robert13 06.12.2017 10:30
robert13
Díky. Ono to má být trochu jinak. Jakmile je ve sloupci H napsáno "x", makro (to kopírování hodnot)…
L-Core 06.12.2017 11:04
L-Core
aha, takže Ty neznačíš každý spracovaný riadok x-om ale len prvý výskyt toho dňa a to značí, že ten…
robert13 06.12.2017 11:16
robert13
Vyberu nějaký/libovolný řádek v tom dnu. Po kopírování a zapsání "x" se má makro ukončit a fokus sko…
L-Core 06.12.2017 11:22
L-Core
Takže pokiaľ je prvý riadok dňa x-ovaný, tak ten deň je hotový aj keď jeho ostatné riadky nie sú ozn…
L-Core 06.12.2017 11:24
L-Core
Prostě po zapsání x chci hledat takový nejbližší řádek, kde je ve sloupci H nižší číslo než v tom řá…
L-Core 06.12.2017 11:30
L-Core
A to se mi právě nedaří... Makro mi zapsalo "x" do sloupce ("H & Riad") Vybral jsem vedlejší buňku…
L-Core 06.12.2017 11:36
L-Core
Nejak takto? (neskúmal som Tvoj kód, riešim Tvoje slovné vysvetlenia): Sub ConsCopy() Riad = Active…
robert13 06.12.2017 11:55
robert13
To je ono, díky :-) Já se trápil s For a ono to jde s Do until a loop. Akorát nevím, proč mi s tím…
L-Core 06.12.2017 12:10
L-Core
pre For potrebuješ nejakú hranicu. Keď nevieš, koľko položiek budeš preverovať, môžeš pridávať po je… poslední
robert13 06.12.2017 12:24
robert13

Nič lepšie, než toto, ma zatiaľ nenapadlo :-D
Program načítava postupne všetky stĺpce prvého riadka (musia byť všetky naplnené), prejde na druhý riadok, prejde v ňom všetky stĺpce, prejde na ďalší riadok atď atď až po posledný riadok.
Informuje, čo máš práve v schránke takže môžeš pastovať do formulára na fokus, ale musíš potom odsúhlasiť MsgBox a máš k dispozícii ďalší údaj...
Toto preklikávanie ale asi nie je to pravé orechové :-D

Aby to aspoň trocha malo zmysel, musíš mať zdroj i cieľ naraz na ploche a to tak, aby MsgBox bol mimo okna cieľa.

Ak máš myš s tlačítkami, ktoré môžeš naprogramovať na Copy a Paste, máš to jednoduchšie.

Tohle vypadá dobře, takto by mě to nenapadlo :)
Akorát musí být připravena "definitivní" excel tabulka, s hodnotami (řádky), které chci do toho webového formuláře zadávat

Pokud by se dalo makro modifikovat, aby fungovalo jen pro určitý řádek (na kterém je fokus) a po kopírování hodnot řádku by skončilo, bylo by to dokonalé :)

Databáze má například 50 řádků a vyplnit do webu chci třeba jen 5 z nich (předem nespecifikovaných, to by měl "určit" právě fokus).

Riadok v Exceli bude odvodený z aktívnej bunky (je jedno, v ktorom stĺpci sa bude nachádzať aktívna bunka).
Po spustení makro prejde všetkými vyplnenými bunkami riadka, v ktorom sa nachádza aktívna bunka, od prvej po poslednú.
Podmienkou je, že musí ísť o celistvú oblasť, t.j. medzi prvou a poslednou bunkou riadka s aktívnou bunkou sa nesmie vyskytnúť prázdna bunka, inak makro prejde len po prvú prázdnu bunku.
Kvôli rýchlemu opätovnému spusteniu makra pri zmene riadka by som napr. do bunky A1 vložil spúšťacie tlačidlo, alebo makro spúšťal pridelenou klávesovou skratkou.
Je úplne jedno, v ktorom riadku Ti začínajú údaje.
Prvá napĺňaná hodnota každého riadka sa odoberá zo stĺpca "A".

Sub ConsCopy()

Riad = ActiveCell.Row
Stlp = Range("A" & Riad).End(xlToRight).Column

If Range("A" & Riad) = "" Then
    MsgBox "Nekorektný riadok", vbCritical
    Exit Sub
End If

For i = 0 To Stlp - 1
        Range("A" & Riad).Offset(0, i).Copy
        MsgBox "Obsah Clipboard-u :  " & Range("A" & Riad).Offset(0, i), vbInformation
Next i

Application.CutCopyMode = False
MsgBox "Koniec riadka", vbExclamation

End Sub

P.S. Nemusíš klikať na "OK" MsgBoxu, stačí stláčať Enter, avšak Enter nahrádza stlačenie OK len ak je aktívny Excel, takže je to asi za jedno...
Vyber si, čo Ti viac vyhovuje:
aktivovať Excel a kliknúť na OK alebo
aktivovať Excel a stlačiť Enter...

Ještě bych to potřeboval malinko vylepšit :-)

- data, která potřebuji kopírovat na web, jsou ve sloupcích A až G (kam "končí práci" to makro)
- data, která nakopíruji, označím "x" v buňce H (makrem)

Makro vypadá takto:

Sub jmeno_makra()

Riad = ActiveCell.Row
Stlp = Range("A" & Riad).End(xlToRight).Column

If Range("A" & Riad) = "" Then
    MsgBox "Nekorektní řádek", vbCritical
    Exit Sub
End If

For i = 0 To Stlp - 1
        Range("A" & Riad).Offset(0, i).Copy
        MsgBox "Obsah schránky:  " & Range("A" & Riad).Offset(0, i), vbInformation
Next i

Application.CutCopyMode = False
MsgBox "Konec řádku", vbExclamation

Range("H" & Riad).Select
ActiveCell.FormulaR1C1 = "x"

End Sub

- ve sloupci I (kam už makro díky práznému sloupci H nezasáhne) mám číslo, označující kalendářní den měsíce, seřazeno vždy plynule sestupně (to nelze změnit), bez přerušení, končí to "1". Položek=řádků za den je více, takže ve sloupci I je to třeba takto:

31
31
31
31
30
30
29
29
29
26
25
25
25
atd

Potřeboval bych to makro doplnit tak, aby fokus skočil (směrem dolů) na první řádek s nižším datumem (číslem) než kde právě makro "probíhalo". Další podmínkou je, že pokud už na takovém řádku je ve sloupci H záznam "x", aby vybral nejbližší další volný řádek toho dalšího (vlastně předchozího) dne. Pokud neexistuje (pro den může existovat třeba jen jeden - nebo i žádný - záznam), přejít na další den.

Viz obrázek, jak by to mělo "chodit":

[80554-excel-png]

Moc děkuji za pomoc. Já to s těmi if v makrech, kdy se prohledávají postupně další a další buňky, prostě neumím...

Sub ConsCopy()

Riad = ActiveCell.Row
Den = Range("I" & Riad).Value

Dalsi:

If Range("A" & Riad) = "" Or Range("H" & Riad) <> "" Then
    MsgBox "Nekorektný riadok", vbCritical
    Exit Sub
End If

For i = 0 To 6
        Range("A" & Riad).Offset(0, i).Copy
        MsgBox "Obsah Clipboard-u :  " & Range("A" & Riad).Offset(0, i), vbInformation
Next i

Application.CutCopyMode = False
MsgBox "Koniec riadka", vbExclamation
Range("H" & Riad) = "x"

Inkr:

Riad = Riad + 1
Range("A" & Riad).Select

If Range("I" & Riad) = "" Then
    MsgBox "Dospel som na koniec databázy", vbInformation
    Exit Sub
    ElseIf Range("H" & Riad) = "x" Then
    GoTo Inkr
        ElseIf Range("i" & Riad) = Den Then
        GoTo Dalsi
        Else: MsgBox "Koniec bloku pre deň " & Den, vbExclamation
        Den = Range("I" & Riad)
End If

End Sub

Program ukončí každý spracovávaný riadok oznamom "Koniec riadka" a označí ho "x"-om.
Pokiaľ za x-om ešte nasleduje ten istý deň, pokračuje ďalej v tento deň kopírovaním do Clipboardu, ak nie, oznámi koniec bloku, skočí na najbližší nižší bez-x-ový deň a čaká na opätovné spustenie.
Pokiaľ zostúpi až na koniec (t.j. v stĺpci I už nie je žiadny dátum), skončí činnosť a oznámi koniec databázy.

P.S.
1 Pokiaľ sa pokúsiš spustiť program v riadku s prázdnym obsahom v stĺpci A alebo v stĺpci už označenom "x", dostaneš hlášku o nekorektnom riadku.

2 Nastavil som to podľa toho, aký príklad si uviedol, t.j. v každom riadku sú naplnené stĺpce A až G, t.j. nezisťuje sa, či niektorý riadok nekončí skôr, než na stĺpci G

Díky.

Ono to má být trochu jinak. Jakmile je ve sloupci H napsáno "x", makro (to kopírování hodnot) musí skončit a najít nejbližší řádek předchozího dne (je to řazeno od 31 k 1), kde ještě nebylo ve sloupci H označeno "x".

Tedy nemělo by platiti toto:

Pokiaľ za x-om ešte nasleduje ten istý deň, pokračuje ďalej v tento deň kopírovaním do Clipboardu

Takže když spustím makro na řádku, kde je ve sloupci I hodnota 25, mělo by to po kopírování a zapsání "x" do I25 skočit na (další) řádek, kde je ve sloupci I hodnota 24. A zároveň ve sloupci H nesmí být "x"

Já na to chtěl jít tak, že nejprve nadu další den a pak budu ověřovat to x.

Ověření x (zda je/není ve sloupci H:

' hledani dalšího volného řádku, kde není "x"

For j = 1 To 10
    Range("H" & Riad + j).Select
    If Range("H" & Riad + j) = "" Then
        Exit For
    End If
Next j

Ale nedařilo se to hledání dalšího (vlastně předchozího) dne:
Tohle nefunguje:

Range("I" & Riad).Select
Denmesice = ActiveCell.Value

For k = 1 To 100
    Range("I" & Riad + k).Select
    If Range("I" & Riad + k).Value = "Denmesice - 1" Then
        Exit For
    End If
Next k

Vyberu nějaký/libovolný řádek v tom dnu. Po kopírování a zapsání "x" se má makro ukončit a fokus skočit na další den (předchozí den fakticky, ale na řádcích v tabulce níže). A tam také nesmí být ve sloupci H to "x".

Samozřejmě mohu pak zase to makro spustit ve stejném dni a na jiném řádku, jako už bylo. Zapíše se "x" do řádku a zase to skočí na další den - v rámci dne mohu kopírovat klidně více řádků, ale po každém to makro musí skončit (a skočit na další datum).

Takže pokiaľ je prvý riadok dňa x-ovaný, tak ten deň je hotový aj keď jeho ostatné riadky nie sú označené?

Ano, pro účely toho makra je vyplnění jediného x = konec makra.

Pak ale to makro zase můžu spustit na jiném řádku stejného dne. Po jeho provedení to zase skočí na další den, kde není x

Prostě po zapsání x chci hledat takový nejbližší řádek, kde je ve sloupci H nižší číslo než v tom řádku, kde se právě x zapsalo. Až makro takový řádek najde (nižší datum, některé dny samozřejmě mohou chybět), ověří se, zda u toho řádku není x. Fokus se pak nastaví třeba na první sloupec takového řádku a makro se zastaví.

Následně je mohu zase ručně! (ne automaticky) spustit, z toho nového dne.

A to se mi právě nedaří...

Makro mi zapsalo "x" do sloupce ("H & Riad")
Vybral jsem vedlejší buňku (I) a její hodnotu (den měsíce) chci označit jako proměnnou (Denmesice)

Range("I" & Riad).Select
Denmesice = ActiveCell.Value

A pak jsem chtěl spustit cyklus tak dlouho, dokud se ve sloupci I neobjeví nižší hodnota, než byla na řádku, kde se to X zapsalo. A tam mám asi nějakou chybu, skončí mi to na dalším řádku stejného dne, neskočí to na další den (den s nižším číslem)..


For k = 1 To 100
    Range("I" & Riad + k).Select
    If Range("I" & Riad + k).Value = "Denmesice - 1" Then
        Exit For
    End If
Next k

Snad nevadí, že hodnota ve sloupci I není tam zapsané číslo, ale výsledek vzorečku =den(řádeksloupec), že se bere z datumu ve sloupci F. Pokud je tam třeba 26 (z datumu 26.10.2016), "poznačí" si

Denmesice = ActiveCell.Value

hodnotu
"26"

Nejak takto?
(neskúmal som Tvoj kód, riešim Tvoje slovné vysvetlenia):

Sub ConsCopy()

Riad = ActiveCell.Row
Den = Range("I" & Riad).Value

Dalsi:

If Range("A" & Riad) = "" Or Range("H" & Riad) <> "" Then
    MsgBox "Nekorektný riadok", vbCritical
    Exit Sub
End If

For i = 0 To 6
        Range("A" & Riad).Offset(0, i).Copy
        MsgBox "Obsah Clipboard-u :  " & Range("A" & Riad).Offset(0, i), vbInformation
Next i

Application.CutCopyMode = False
MsgBox "Koniec riadka", vbExclamation
Range("H" & Riad) = "x"

Do Until Range("I" & Riad) <> Den And Range("H" & Riad) <> "x"
    Riad = Riad + 1
Loop

Range("A" & Riad).Select

If Range("I" & Riad) = "" Then MsgBox "Dospel som na koniec databázy", vbInformation

End Sub

Zpět do poradny Odpovědět na původní otázku Nahoru