Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  8 9 10 11 12 13 14 15 16   další »

Můžeme to zkusit, nebude to porpvé ani naposledy 7

IMHO, stačí jeden UserForm, kdy po jednotlivých kategoriích bude načítat daná data k subkategorii, atd.....
Snad.

Záleží také na struktuře dat.

Lon

Přemýšlím o nejjednodušším řešení. Pokud jde pouze o informaci, pak by bylo vhodné vložit místo hodnoty vzorec, který by v případě platné hodnoty tuto zobrazil, v případě výmazu známky by pak vložil hodnotu:
např. -1.
Pokud by však někdo odstranil celý řádek i s daty (tedy "Odstranit řádek") vznikaly by pak chyby s neexistujícím odkazem.

Ovšem vše jde také řešit elegantněji a to zamčením sešitu (listu) proti úpravám.

Řešení je na Vás.

Lon

NZ,
Budu o tom uvažovat, ale spíše mírně pokročilý. 24 28

Lon

Tak jsem si odpověděl sám. 7

Váše komletní makro s mými drobnými úpravami.


Private Sub CommandButton1_Click()
Dim rd As Single
Dim cislo As Single
rd = ActiveSheet.UsedRange.Rows.Count + 1
Cells(rd, 1) = ComboBox2.Text
If CheckBox1.Value = True Then Cells(rd, 3) = "ANO" Else Cells(rd, 3) = "NE"
cislo = TextBox2
Cells(rd, 4) = cislo
Cells(rd, 5) = TextBox1

Call Dopln_do_znamka(ComboBox2.Text, cislo)
End Sub

Private Sub CommandButton2_Click()
Me.Hide
End Sub

Private Sub UserForm_Activate()
ComboBox2.Clear
Call nacti_seznam
'ComboBox2.AddItem "Adam Janků"
'ComboBox2.AddItem "Petr Král"
'ComboBox2.AddItem "Karel Nekrál"
End Sub

Private Sub Dopln_do_znamka(Jmeno, znamka)

Dim rd_start As Single
Dim sl_start As Single

rd_start = 6
sl_start = 3

While Sheets("Známka").Cells(rd_start, 2) <> Empty
If Sheets("Známka").Cells(rd_start, 2) = Jmeno Then
While Sheets("Známka").Cells(rd_start, sl_start) <> Empty
sl_start = sl_start + 1
Wend
Sheets("Známka").Cells(rd_start, sl_start) = znamka
Exit Sub
End If
rd_start = rd_start + 1
Wend
End Sub

Private Sub nacti_seznam()

Dim rd As Single
rd = 6

While Sheets("Známka").Cells(rd, 2) <> Empty
ComboBox2.AddItem Sheets("Známka").Cells(rd, 2)
rd = rd + 1
Wend

End Sub


Lon

Možná by bylo vhodné několik upřesnění.
Kde bude uložen seznam osob (předpokládám list Známka) a také předpokládám, že budete chtít načítat tento seznam do pole ve formuláři.

Lon

Princip je, že se mění údaje v listu Word, tak se při otevření souboru Objednávka.doc data načtou z excelové tabulky. To je hromadná korespondence, umí toho mnohem víc, ale toto je pro Tvůj případ dostačující.

Tedy při zápisu položek do faktury se také musí přenést do listu Word. Jedno jakým způsobem, ručně nebo automaticky.
Moc nerozumím větě:
Asík by to nešlo nastavit nějakým makrem, aby se to dělalo automaticky, že? Třeba že faktura by byla uložena ve stejném adresáři jako excel...
Co by se mělo dělat automaticky?
Psal jsem, že podmínkou pro správné fungování je mít uložené oba zdrojové soubory (Excel i Word) v jednom adresáři, pak se při změně nemusí stále hledat nová cesta k souboru s daty.

Lon

Není zač, snad to bude již v pořádku.
Lon

Pak tato úprava by měla dostačovat. Netestoval jsem, jen upravil původní kód.
Špatně pochopeno ze zadání.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'test na změnu položky A2
If ActiveCell.Row = 2 And ActiveCell.Column = 2 Then ' nejsi na buňce A2
Jmeno = Cells(2, 2)
If Cells(2, 151) = Jmeno Then
' položka se shoduje - nedělej nic
Exit Sub
Else
' ulož si položku pro příští porovnání
Cells(2, 151) = Jmeno
End If

Sesit = "MyJob"
List = ActiveSheet.Name
' číslo listu pro přejmenování
pocet = 6

' přejmenuj jej na požadovaný název
Sheets(pocet).Name = Jmeno
' otevři sešit - v tomto případě MyJob - uložený ve stejném adresáři
Workbooks.Open Filename:=Sesit + ".xlsx"

' zkopíruj oblast buněk A1 až EU35
Workbooks(Sesit).Sheets(Jmeno).Range("A1", "EU35").Copy
' ulož ji do listu 6
Workbooks("Ulohy").Sheets(Jmeno).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
' potlačení hlášky o oblasti kopírování ve schránce
Application.DisplayAlerts = False
' zavři sešit MyJob
Workbooks(Sesit).Close

Application.DisplayAlerts = True
Application.CutCopyMode = False
Sheets(List).Select
End If

End Sub


Samozřejmě. že neznám data Listu3 použil jsem
' ulož si položku pro příští porovnání
Cells(2, 151) = Jmeno

Buňku Cells(2,151) - tedy "EV2" lze zvolit za jinou vhodnou pro data v listu.
Z tohoto důvodu jsou ukázky vhodné.

Požadavek na kopii byly DATA - tedy funkce PasteSpecial...
Lon

Tak se podívej do těch skrytých listů, samé odkazy #REF!
Něco bylo přemístěno a tak žádné vzorce nemohou fungovat.

Lon

No, takže jinak.
Spousta chyb v sešitě, nefunguje to co má.

Vytvoř si tam list, který se bude jmenovat třeba Word, do něj na první řádek zapiš nadpisy položek, které chceš mít v tom dokumentu (jako záhlaví sloupců).
Pak tam vlož data (okopírováním, makrem), to je mi jedno.
Poté Ti na to vytvořím hromadku, ale abych tohle ještě louskal, opravoval a mořil se s tím, na to fakt nemám čas.
Díky za pochopení.

Lon

Co mě asi tak napadá.
Samozřejmě musí toto makro být umístěno na Listu3 v sekci Worksheet_SelectionChange!


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'test na změnu položky A2
If ActiveCell.Row = 2 And ActiveCell.Column = 2 Then ' nejsi na buňce A2
Jmeno = Cells(2, 2)
If Cells(2, 151) = Jmeno Then
' položka se shoduje - nedělej nic
Exit Sub
Else
' ulož si položku pro příští porovnání
Cells(2, 151) = Jmeno
End If

Sesit = "MyJob"
List = ActiveSheet.Name
pocet = Sheets.Count

' přidej nový list do sešitu Ulohy
Sheets.Add After:=Sheets(pocet)
' přejmenuj jej na požadovaný název
Sheets(pocet + 1).Name = Jmeno
' otevři sešit - v tomto případě MyJob - uložený ve stejném adresáři
Workbooks.Open Filename:=Sesit + ".xlsx"

' zkopíruj oblast buněk A1 až EU35
Workbooks(Sesit).Sheets(Jmeno).Range("A1", "EU35").Copy
' ulož ji do nově vytvořeného listu
Workbooks("Ulohy").Sheets(Jmeno).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
' potlačení hlášky o oblasti kopírování ve schránce
Application.DisplayAlerts = False
' zavři sešit MyJob
Workbooks(Sesit).Close

Application.DisplayAlerts = True
Application.CutCopyMode = False
Sheets(List).Select
End If

End Sub


Lon

Byla by možná ukázka obou zmiňovaných sešitů?
Pokud tomu dobře rozumím, tak při jakékoliv změně v buňce A2 se má vytvořit nový list s daty a data přenést do jiného sešitu s názvem listu v A2?

Umístění obou sešitů předpokládám ve stejném adresáři.

Taky nejsem profesional.

Lon

To je otázka 5-ti minut.
Co sem dát oba soubory? Excel i Word.

Lon

To je to nejjednodušší. 4
Jaké MSO máš? 2007?

Lon


Strana:  1 ... « předchozí  8 9 10 11 12 13 14 15 16   další »

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