Stránka 1 z 1

VBA: nelze použít With v kombinaci s objektem Worksheets

Napsal: 27 lis 2011 23:59
od d1amond
Zdravím,
plácám se tu s kódem a už nevím, co je špatně. Mám proceduru na tlačítko, která má prostý úkol. Z buňky A1 listu 1 aktivního sešitu odkud je spuštěná, načíst text (String).
Tento text je použit jako název druhého sešitu (Workbook - již otevřen) a následně chci na listu1 odkazovaného sešitu vybrat konkrétní buňku.

Kód: Vybrat vše

Sub pokus()
Dim wbk As Workbook
Dim wsh As Worksheet
Dim strWbkName As String

'nastavi nazev pro sesit
strWbkName = ThisWorkbook.Worksheets("list1").Range("A1").Value

'objekt workbook s názvem z strWbkName
Set wbk = Workbooks(strWbkName)

'objekt worksheet na wbk
Set wsh = wbk.Worksheets("list1")

'práce s objektem wsh
With wsh
.Range("C4").Select
'a pokracuje nejaky kod

End With

End Sub


Po spuštění hlásí "Metoda Select třídy Range selhala". Bude někdo vědět, kde je chyba?

//při psaní se intellisense chová naprosto normálně :eh:

Re: VBA: nelze použít With v kombinaci s objektem Worksheets

Napsal: 28 lis 2011 04:07
od Branscombe
Tak to nevím, ale ani na netu jsem odpověď nenašel ikdyž ten samý problém už někdo jiný měl ...

Zkusil jsem to obejít aktivací okna souboru a funguje. Snad ti to pomůže.

Kód: Vybrat vše

Sub pokus()
Dim wsh As Worksheet
Dim strWbkName As String

'nastavi nazev pro sesit
strWbkName = ThisWorkbook.Worksheets("list1").Range("A1").Value

Windows(strWbkName).Activate

'objekt worksheet na wbk
Set wsh = ActiveWorkbook.Worksheets("list1")

'práce s objektem wsh
With wsh
.Range("C4").Select
'a pokracuje nejaky kod

End With

End Sub

Re: VBA: nelze použít With v kombinaci s objektem Worksheets

Napsal: 28 lis 2011 09:28
od d1amond
Díky. Podobně jsem to vyřešil s Range.Activate. Ale to je nemožné, pokud potřebuji pracovat s oběma sešity současně. V tomm případě bych musel po každé akci přepínat okna, a představ si cykly, které procházejí byť "jen" 1000 řádků v každém sešitu, na střídačku :roll:

Re: VBA: nelze použít With v kombinaci s objektem Worksheets

Napsal: 29 lis 2011 02:02
od Branscombe
Nemusíš stále přepínat okna, stačí jednou přepnout okno a definovat mu jen jednou že tento list je wsh. Ale jaksi nelze v tomto případě definovat wsh když jsi v jiném sešitu.

Re: VBA: nelze použít With v kombinaci s objektem Worksheets

Napsal: 29 lis 2011 21:53
od Pavel1234
Zdravím
Kody jsem nezkoušel ale nemyslím si, že problém je v přiřazení objektu
Nemusíš stále přepínat okna, stačí jednou přepnout okno a definovat mu jen jednou že tento list je wsh. Ale jaksi nelze v tomto případě definovat wsh když jsi v jiném sešitu.

ale je spíše v metodě select, která odmítá fungovat v neaktivním objektu (wbk; wsh)
Po spuštění hlásí "Metoda Select třídy Range selhala". Bude někdo vědět, kde je chyba?

Je tedy zapotřebí tuto metodu obejít Tedy místo

Kód: Vybrat vše

Wkb(1).Wsh(1).Range("A1").Select
vrt = Selection.Value

Napsat rovnou

Kód: Vybrat vše

vrt = Wkb(1).Wsh(1).Range("A1").Value

Problém je, že některé metody jsou dostupné pouze pro Selection. Zkus dát důvod toho .Select a pak mohu zkusit najít způsob jak ho obejít
Pavel