Я написал функцию 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
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
Благодаря всеобщей помощи мне удалось завершить программу. Вот мои коды. Не стесняйтесь использовать это.
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
Функции следует использовать не для изменения других ячеек, а для вычисления и возврата значения.
Сделайте свою рутину вспомогательной, а не функцией. Тогда назовите его без скобок.
Похожие вопросы
Новые вопросы
vba
Visual Basic для приложений (VBA) — это управляемый событиями объектно-ориентированный язык программирования для написания макросов, используемый для всего пакета Office, а также для других приложений. VBA не эквивалентен VB.NET или VBS; если вы работаете в Visual Studio, используйте [vb.net]. Если ваш вопрос конкретно касается программирования какого-либо приложения MS Office, также используйте соответствующий тег: [excel], [ms-access], [ms-word], [outlook], [visio] или [ms-project].