Stránka 1 z 1

VBA nepřímý odkaz

Napsal: 13 bře 2015 15:34
od VOM
Dobrý den
Nahrál jsem si makro, které mi po spuštění havaruje, viz níže.

Sub Overeni_neprimy_odkaz()
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=NEPŘÍMÝ.ODKAZ(D30)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

Lze prosím použít nepřímý odkaz ve VBA?
díky
Milan

Re: VBA nepřímý odkaz

Napsal: 13 bře 2015 16:25
od guest
A) Formula1:="=INDIRECT(D30)", tj. anglicky
B) V D30 musí být předem již platný odkaz (když to tvoříte ručně, Excel nahlásí neplatný odkaz, ale nechá vás pokračovat, pod VBA pokud vím žádné DisplayAlerts = False nepomáhá a On Error je taky na pytel).

Re: VBA nepřímý odkaz

Napsal: 18 bře 2015 16:26
od VOM
Děkuji, posunul jsem se dál a nyní mám:

Sub Overeni_neprimy_odkaz()
Dim Cur_Cell As String
Dim Cur_Cel_Raw As Integer
Cur_Cell = ActiveCell.Offset(0, -1).Address
Cur_Cel_Raw = ActiveCell.Row
Debug.Print Cur_Cel_Raw

With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(" & Cur_Cell & ")"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

v buňce je potom např:
=NEPŘÍMÝ.ODKAZ($D$1693)

Jak mám prosím zařídit,
1. když vyberu jednu buňku, abych to mohl lehce zkopírovat dolů, aby tam nebyly ty značky dolarů
2. nebo když vyberu oblast, aby proběhl cyklus přes vybrané řádky (tohle by se mi líbilo více)

děkuji
Milan

Re: VBA nepřímý odkaz

Napsal: 18 bře 2015 17:20
od cmuch
1)
Uprav Cur_Cell takto, v závorce si ponech co bude vyhovovat

Kód: Vybrat vše

Cur_Cell = ActiveCell.Offset(0, -1).Address(RowAbsolute:=False, ColumnAbsolute:=False)


2)
Toto projde všechny buňky ve výběru

Kód: Vybrat vše

Sub CellsSelection()

Dim rng As Range
Set rng = Application.Selection

Dim cell As Range
For Each cell In rng
    'kod
Next

End Sub

Re: VBA nepřímý odkaz

Napsal: 18 bře 2015 18:02
od guest
a) zkráceně jak píše cmuch, ne úplně typově správně stačí psát .Address(0,0)
b) nemyslím si, že je nutné používat cyklus, ověření dat se kopíruje normálně, takže stačí něco ve smyslu FillDown (zkuste si Záznamník maker a tažení za vyplňovací úchyt)

Re: VBA nepřímý odkaz

Napsal: 18 bře 2015 19:02
od VOM
Děkuji za rady.
Zatím to vypadá, stačí použít zrušení absolutní adresy a cyklus přes výběr není nutný. "Cyklus" proběhne sám od sebe.
díky
Milan