Ваша первая попытка имеет несколько проблем.
FormulaR1C1
не представляется квалифицированным, поэтому это либо опечатка, либо пустой вариант xElement = FormulaR1C1 = ...
присваивает логическое значение (результат второго сравнения: FormulaR1C1 = ...
to xElement
- И, наконец, чтобы изменить массив на месте, вы не можете
For Each
, вам нужно использовать индексированное присваивание, в противном случае xElement
изменяется без изменения xArray
!
Dim a as Long
For a = LBound(xArray) to UBound(xArray)`
xArray(a) = "something..."
Next
Ваша вторая попытка не удалась, поскольку аргумент Anchor
не может быть пустой строкой. Для dox, это должна быть форма или диапазонobject .
Возможно ли сделать то, что я пытаюсь сделать?
Строго, нет. Вы не можете "преобразовать элементы массива в гиперссылки раньшераспечатав его на моей вкладке «Индекс», потому что не существует конструктора для индивидуального Hyperlink
, который вам доступен (т. е. вы не можете просто создать или создать экземпляр Hyperlink
самостоятельно, он можетсоздается только с помощью метода Hyperlinks.Add
, который требует аргумент Anchor
).
Итак, решениепросто создать их, используя метод .Hyperlinks.Add
во время итерации массива, например:
Dim wsIndex as Worksheet
Set wsIndex = Worksheets("Index")
Dim x as Long
With wsIndex
For x = LBound(xArr) To UBound(xArr)
.Hyperlinks.Add _
wsIndex.Cells(x + 1, 1), _
xArr(x).Name & "!A1", _
TextToDisplay:=xArr(x).Name
Next
End With
Обновление
Вы можете хранить гиперссылкив массиве или коллекции, но не до тех пор, пока они не будут созданы первыми.Вы можете сделать что-то вроде:
ReDim links(LBound(xArr) to UBound(xArr))
Dim h as Hyperlink
Dim wsIndex as Worksheet
Set wsIndex = Worksheets("Index")
Dim x as Long
With wsIndex
For x = LBound(xArr) To UBound(xArr)
Set h = .Hyperlinks.Add _
wsIndex.Cells(x + 1, 1), _
xArr(x).Name & "!A1", _
TextToDisplay:=xArr(x).Name
' Store the link in an array for later use, if needed
Set links(x) = h
Next
End With