< návrat zpět

MS Excel


Téma: nespojitá oblast rss

Zaslal/a 7.10.2010 19:49

Potřebuji získat pomocí VBA přístup ke všem vybraným řádkům, resp. k buňkám, které mají nespojenou oblast.
Příklad- na listu ručně vyberu celé řádky 2, 4, 7, 10 a ty potřebuji procházet po jednotlivých buňkach (v každém řádku cca 25) a získat jejich hodnotu.
Ve spojité oblasti to mám vyřešené pomocí Selection, ale nevím jak na tu nespojitou

Zaslat odpověď >

#002677
Jeza.m
Přes selection by to mělo fungovat i v tomto případě:
For Each cell In Selection
If cell.Value <> "" Then MsgBox cell.Value
Next

v msgbox ti to zobrazí postupně hodnoty všech neprázdných buněk ve vybrané oblasti ať je jakákoliv.

M@citovat
#002678
avatar
No měl jsem na mysli trochu něco jiného. Potřebuji přiřadit vždy hodnotu buňky v řádku ve vybrané oblasti.
Nyní to mám:

Dim Vst As Object
Dim Data(1 To 4, 1 To 30) As String
set Vst = selection
For i = 1 To Vst.Rows.Count
Data(i, 1) = Vst(i, 1)
Data(i, 2) = Vst(i, 2)
Data(i, 3) = Vst(i, 11
....
Next i

Pokud vyberu 4 řádky za sebou, funguje to perfektně. Ale pokud nejsou za sebou, tak ne.citovat
#002687
avatar
pls, ví někdo ??? 3citovat
#002689
avatar
chtělo by to příklad ať lépe vidíme co to má dělat.citovat
#002691
avatar
Vyberou se 4 řádky, ručně pomocí myši a hodnoty určitých buněk se přiřazují do dvourozměrného pole. Data z pole se pak používaji pro editaci atributů bloků ve výkresu AutoCad.
Jak uvádím v kodu výše, procházím každý řádek a zapisuji do pole. Pokud jsou vybrány řádky za sebou, tak to funguje s použitím přiřazení k objektu pomocí Selection. Potřebuji ale také vybírat řádky napřeskáčku a pak tento kod nefunguje, resp. použije se pouze první řádek výběru.citovat
#002695
Jeza.m
Tak jsem to zkoušel a tvůj příklad nefunguje, protože u multivýběru nefuguje příkaz Selection.Rows.Count ten vždy vrátí 1.
Trochu jsem to zkusil obejít:
Dim radek As Single
Dim rd As Single
Dim Data(1 To 4, 1 To 30) As String

radek = 0

For Each cell In Selection
If rd <> cell.Row Then radek = radek + 1
If cell.Column < 30 Then
Data(radek, cell.Column) = cell.Value
'MsgBox cell.Value & vbNewLine & radek & " / " & cell.Column
End If
rd = cell.Row
Next

jinak kdybys to chtěl udělat svým způsobem, tak by asi bylo nejsnažší udělat Selection.copy a vložit vybraná data do "pracovního listu", kde by si z toho měl spojitou oblast :-).

S pozdravem
M@citovat
#002697
avatar
Díky moc, to jsem potřeboval 7
Narazil jsem na možnost použití vlastnosti Areas, kterou by to šlo asi taky, ale tvůj kod vypadá jednodušeji. Ještě jednou díkycitovat
#003146
avatar

'---------------------------------------------
Sub vypis()
'---------------------------------------------
Dim c As Range
Dim i As Long
Dim citac As Long

citac = 1
For i = 1 To Selection.Areas.Count
For Each c In Selection.Areas(i)
Cells(citac, 20).Value = c.Value
citac = citac + 1
Next c
Next i
End Sub
'---------------------------------------------
citovat

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