< návrat zpět

MS Excel


Téma: VBA Call sheet (aj ked neviem presny nazov) rss

Zaslal/a 20.10.2015 14:12

Dobrý deň
potreboval by som poradiť.
Mam makro ktoré otvori všetky *.xlsm súbory v danom adresári a načíta data z posledného sheetu (sheet.count)
Ako ale nastaviť iný sheet ak neviem ako sa vola resp môže mat len 3 tvary.
1. Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "IXO")

2. Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "KUFU")

3. Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "MRAZ")

kde mesiac a rok su premenne typu integer, ktoré si vyberiem vo formulári

Asi dať posledne slovo názvu sheetu do variable ale ako a ako načítať iba posledne slovo názvu sheetu (string)

Zaslat odpověď >

Strana:  1 2   další »
icon #027559
eLCHa
Pokud by existovala jediná kombinace, mohlo by stačit něco takovéhoOn Error Resume Next
Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "IXO")
If DestSheet Is Nothing Then
Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "KUFU")
End If
If DestSheet Is Nothing Then
Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & "MRAZ")
End If
On Error GoTo 0
If Not DestSheet Is Nothing Then
'kód
End If
Jinak musíte přesně vysvětlit co znamená môže mat len 3 tvarycitovat
#027563
avatar
Doporučuji nastudovat práci s operátorem Like, který poskytuje pro úlohy podobného typu velmi účinnou volbou testu.citovat
#027565
avatar
Vďaka
(3 tvary= názov sheetu je rovnaký až na posledne slovo ktore može byť iba IXO or KUFU or MRAZ)
Idem študovať 1citovat
icon #027568
eLCHa
@Vovka
Like?citovat
#027576
avatar
Vovka myslel určitě něco takého

Sub CheckNameSheet()
Dim NameSh As String
Dim MyCheck As Boolean
MyCheck = False
NameSh = ActiveSheet.Name
If NameSh Like "*MRAZ" Or NameSh Like "*KUFU" Or NameSh Like "*IXO" Then
MyCheck = True
End If
End Sub
citovat
#027578
avatar
Opravdu jsem měl na mysli to, co použil cmuch1 ve svém kódu. Operátor Like umí kromě "divokých znaků" ? a * i další konstrukce srovnávacího řetězce a významně tak rozšiřuje možnosti testování obsahu řetězců.
Využití schopností Like jsem se pokusil přenést také do oblasti funkcí listu v podobě své UDF ULike(Řetězec;Vzor), jak ji lze najít v doplňku UDFstandard1.
Ani operátor Like ovšem netvoří špici pro práci s neurčitým obsahem řetězce. Tu představují (podle toho, co vím) tzv. regulární výrazy, jejichž knihovnu si lze pro Excel vypůjčit z VBScriptu. Nedávno jsem dokonce objevil UDF, která umožňuje pracovat s regulárními výrazy v rámci funkcí listu. Regulární výrazy jsou ale velmi košaté téma, vyžadující pečlivé nastudování. Znám jen velmi málo příkladů práce s touto strukturou. Já jsem si zatím s možností Like bohatě vystačil.citovat
icon #027579
eLCHa
Ve spojení s ActiveSheet budiž - to byste testovali jestli tento list má na konci názvu jednu z těch koncovek. Takže by stačiloIf NameSh Like ""PV-" & mesiac & "_" & rok*"može byť iba IXO or KUFU or MRAZ

Jenže byste museli projíždět všechny listy sešitu a to mi přijde zbytečné, když znám "přesný název listu" (kromě koncovky). Ten zmatený dotaz totiž zní:
"Ako ale nastaviť iný sheet".citovat
#027580
avatar
A co tedy takto, pokud tazatel již dopředu zná celý název listu.

Dim EndNameSheet As String
EndNameSheet = "IXO" 'zde si nastavim (jakkoli) jaky list chci vybrat
Set DestSheet = WorkBk.Sheets("PV-" & mesiac & "_" & rok & EndNameSheet)
citovat
icon #027581
eLCHa
@cmuch

což je v podstatě to, co jsem navrhl ;))

Ten dotaz neříká, jestli tu koncovku znám, proto tam mám 3 možnosti. Šlo by to napsat elegantněji, ale to by musel být pořádně napsán dotaz (ideálně s přílohou)citovat
#027590
avatar
Už se perou, já to říkala :-D

Použil bych vyhledávácí funkci Application.Match na poli názvů listů.citovat

Strana:  1 2   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

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32