Я написал функцию CopyAndPaste и попытался вызвать функцию из Main. Однако есть ошибка по адресу:

CopyAndPaste(ThisWS,FromRange,ThisWS,ToRange,False)

Ошибка компиляции
Ожидается: =

Могу я узнать, почему это происходит?

Sub Main()

Dim ThisWS As Worksheet, FromRange As Range, ToRange As Range

Set ThisWS = ActiveSheet
Set FromRange = Range("I6")
Set ToRange = Range("M6")

CopyAndPaste(ThisWS,FromRange,ThisWS,ToRange,False)

End Sub    


Function CopyAndPaste(RefSheet As Worksheet, RefRange As Range, ToSheet As Worksheet, ToRange As Range, _
                      Optional HLink As Boolean)

RefSheet.RefRange.Copy Destination:=ToSheet.ToRange

If HLink = True Then
    ActiveSheet.Hyperlinks.Add _
        Anchor:=ToSheet.ToRange, _
        Address:="", _
        SubAddress:=RefSheet.Name & "!" & RefRange.Address, _
        ScreenTip:="Click to view details", _
        TextToDisplay:=""
End If

End Function
1
FlyFly Wing 8 Сен 2016 в 05:05

3 ответа

У вас есть несколько переменных, которые вы передаете (но в действительности они не нужны).

1. После того как вы определите и установите FromRange из рабочего листа ThisWS , в дальнейшем нет необходимости использовать RefSheet.RefRange, вы можете просто использовать RefRange.

2. Поскольку вы ничего не возвращаете из CopyAndPaste , это должна быть обычная подпрограмма (не обязательно функция).

3. Не уверен, что у вас есть 1 или 2 листа, так как RefSheet и ToSheet одинаковы, поскольку они оба получают переданный аргумент ThisWS (рабочий лист).

Sub Main()

Dim ThisWS As Worksheet, FromRange As range, ToRange As range

' it's better if you used instead something like Set ThisWS = Sheets("YourSheetName")
Set ThisWS = ActiveSheet
Set FromRange = ThisWS.range("I6")
Set ToRange = ThisWS.range("M6")

CopyAndPaste FromRange, ThisWS, ToRange, False

End Sub


Sub CopyAndPaste(RefRange As range, ToSheet As Worksheet, ToRange As range, _
                      Optional HLink As Boolean)

RefRange.Copy ToRange

If HLink = True Then
    ToSheet.Hyperlinks.Add _
        Anchor:=ToRange, _
        Address:="", _
        SubAddress:=RefRange.Parent.Name & "!" & RefRange.Address, _
        ScreenTip:="Click to view details", _
        TextToDisplay:=""
End If

End Sub
2
Shai Rado 8 Сен 2016 в 03:07

Благодаря всеобщей помощи мне удалось завершить программу. Вот мои коды. Не стесняйтесь использовать это.

Sub Main()

Dim FromSheet As Worksheet, ToSheet As Worksheet
Dim FromRange As Range, ToRange As Range

Set FromSheet = Worksheets(1)
Set ToSheet = Worksheets(2)
Set FromRange = FromSheet.Range("E10:E15")
Set ToCell = ToSheet.Range("N2")

CopyAndPaste FromRange, ToCell, True

End Sub

Public Sub CopyAndPaste(FromRange As Range, ToCell As Range, Optional HLink As Boolean)

If HLink = True Then

Dim FromCell As Range, R As Long, C As Long

R = FromRange.Rows.count
C = FromRange.Columns.count

    For C = 0 To C - 1
    For R = 0 To R - 1

        ToCell.Parent.Hyperlinks.Add _
            Anchor:=ToCell.Offset(R, C), _
            Address:="", _
            SubAddress:="'" & FromRange.Parent.Name & "'!" & FromRange.Rows(R + 1).Columns(C + 1).Address, _
            ScreenTip:="Click to view Sheet: " & FromRange.Parent.Name, _
            TextToDisplay:=FromRange.Rows(R + 1).Columns(C + 1).Value
    Next R
    Next C

Else

FromRange.Copy ToCell

End If

End Sub
0
FlyFly Wing 9 Сен 2016 в 04:27

Функции следует использовать не для изменения других ячеек, а для вычисления и возврата значения.

Сделайте свою рутину вспомогательной, а не функцией. Тогда назовите его без скобок.

1
teylyn 8 Сен 2016 в 02:47