< návrat zpět

MS Excel


Téma: Dynamický import rss

Zaslal/a 3.8.2010 21:44

Zdravím, potreboval by som vyriešiť nasledovný problém (vo VBA som amatér):
V zošite „Ulohy“ na „List3“ v bunke „A2“ mám dynamicky meniaci sa text (napr R2010M2D21, R2010M3D1, ....).
1. Potrebujem funkciu alebo macro, ktoré by pri zmene textu v bunke „A2“ pomenovalo týmto textom v tom istom zošite rovnaký volný list napr „List6“.
2. Rovnakými menami ako generuje bunka „A2“ sú v inom zošite „MyJob“ pomenované jednotlivé listy, ktoré obsahujú rovnakú štruktúru dát. Potrebujem funkciu alebo macro ktoré po zmene textu v „A2“ skopíruje dáta z listu rovnakého mena zošitu „MyJob“ do zošitu „Ulohy“ do listu „List6“ . Rozsah buniek A1:EU35.
Ďakujem DO.

Zaslat odpověď >

#002069
Začátečník
Dobře, tak trošku jinak.
Excel má funkci "Záznam makra", pokus se nejprve sám provést to co potřebuješ a pak sem dej případný výsledek k dotvoření a "učesání". Tedy pokud se chceš něčemu přiučit a trošku porozumět.

Nejlépe se naučíš na svých chybách

Nejsem tak starý, ale hodně pamatuju

Loncitovat
#002080
avatar
Nerobím si iluzie, ale VBA je mi velmi vzdialené. Pre zjednodušenie výpočtov som z C++ exportoval súbory csv do excel a chcem v excel robiť výpočty. Preto môj pôvodný dotaz. Študovať VBA v tejto chvíli považujem za mrhanie času. Zadaný problém z pohľadu skúseného programátora VBA považujem za triviálny, preto som sa obrátil na predpokladám odborníkov , možná gurov v Exceli.Nakoľko sa jedná o serióznu prácu, aby som nemusel experimentovať, požiadal som o návrh riešenia. Viem, že to dokážem naštudovať, ale neviem, či by to bolo profesionálne riešenie, bez možných, nepredvídateľných chýb.
Skúsim to:
Sub NoveMeno ()
Shet(6).Name= Sheet(3).Range("A2")
Workbooks.Filename:="C:\MyJob\Sheet.Active.Workbooks("Ulohy").Sheet.Range("A2").MoveAfter:=Workbooks("Ulohy").Sheet(5)
End Sub

MyJob nemusí byť otvorený, stačí preniesť dáta zo zodpovedajúceho listu do "listu6"citovat
#002081
Začátečník
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.

Loncitovat
#002083
Začátečník
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


Loncitovat
#002087
avatar
Odpoveď na položenú otázku.
Pri zmene obsahu bunky A2 sa má spustiť macro, ktoré premenuje stále ten istý list v zošite „Ulohy“ (prvý prázdny list je List6).
Zošit „MyJob“ obsahuje množstvo listov, ktorých počet priebežne narastá. Tieto listy sú už pomenované menami ako sa mení obsah bunky A2 . Meno jedného z týchto listov je teda zhodné s menom, ktoré obsahuje bunka A2.
Macro má preniesť dáta zo zošita „MyJob“ z listu s menom zhodným s obsahom A2, do zošita „Ulohy“, do toho istého listu, ktorý som premenoval podľa bunky A2.
Formáty buniek sa nemusia prenášať, stačí ich skopírovať tak ako sú.
Pre užívateľa je list3, na ktorom je uvedená bunka A2, schovaný.
DOcitovat
#002088
Začátečník
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...
Loncitovat
#002089
avatar
Úprimná vďaka za riešenie
Odskúšam ho
Pekný zvyšok večera
DOcitovat
#002090
Začátečník
Není zač, snad to bude již v pořádku.
Loncitovat

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