Насколько я могу судить, вместо этого вы можете использовать быструю функцию. Похоже, что нет никаких различий в ваших результатах оператора If
в функции moveCell()
, за исключением того, какой лист вы используете.
Мы можем сделать это проще, обратившись к Range
, который вы Вы переходите к moveCell
.
Option Explicit ' forces you to declare all variables
Sub something()
Dim PDCell As Range
Set PDCell = Worksheets("Processed Data").Cells(1, 1)
Dim DICell As Range
Set DICell = Worksheets("Data Input").Cells(1, 1)
PDCell.Select ' can remove
Set PDCell = moveCell(2, 0, PDCell, PDCell.Worksheet.Name)
PDCell.Select ' can remove
Worksheets(DICell.Worksheet.Name).Activate ' can remove
DICell.Select ' can remove
Set DICell = moveCell(5, 0, DICell, DICell.Worksheet.Name)
DICell.Select ' can remove
End Sub
Function moveCell(rowsToMove As Long, colsToMove As Long, cel As Range, ws As String) As Range
Set moveCell = Worksheets(ws).Cells(cel.Row + rowsToMove, cel.Column + colsToMove)
End Function
Я добавил несколько строк, которые вам не нужны (которые я пометил комментарием позже), но это покажет вам, как работает подпрограмма. Вы можете шаг за шагом набрать F8 , чтобы увидеть его пошагово.
Редактировать: Хотя, вам вообще не нужна отдельная функция . Просто используйте OFFSET()
.
Set PDCell = ...whatever originally
Set PDCell = PDCell.Offset([rows],[cols])