VBA nepřímý odkaz

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

VBA nepřímý odkaz

Příspěvekod VOM » 13 bře 2015 15:34

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

Reklama
guest
Pohlaví: Nespecifikováno

Re: VBA nepřímý odkaz

Příspěvekod guest » 13 bře 2015 16:25

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).

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: VBA nepřímý odkaz

Příspěvekod VOM » 18 bře 2015 16:26

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

cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: VBA nepřímý odkaz

Příspěvekod cmuch » 18 bře 2015 17:20

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

guest
Pohlaví: Nespecifikováno

Re: VBA nepřímý odkaz

Příspěvekod guest » 18 bře 2015 18:02

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)

VOM
Level 1.5
Level 1.5
Příspěvky: 114
Registrován: srpen 10
Pohlaví: Muž
Stav:
Offline

Re: VBA nepřímý odkaz

Příspěvekod VOM » 18 bře 2015 19:02

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


Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host