Мне нужна помощь, чтобы сократить этот кусок кода.Процедура слишком велика VBA excel
мне нужно использовать этот код If (linha >= 20 And linha <= 21)
для линии 50 (Linha) интервалы
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim foto As Range
Dim destino As Range
Dim linha As Long
Dim fName As String
Dim pName As String
Dim iName As String
Dim iNameClean As String
Dim iNameExcel As String
Dim fNameExcel As String
Set foto = Target.Cells(1)
Set destino = Me.Range("AU:BC,BN:BV,CG:CO,CZ:DH,DS:EA,EL:ET,FE:FM,FX:GF,GQ:GY,HJ:HR,IC:IK,IV:JD,JO:JW,KH:KP,NF:NN,NY:OG,OR:OZ,PK:PS")
If Not Application.Intersect(foto, destino) Is Nothing Then
linha = foto.Row
If (linha >= 20 And linha <= 21) Then
With ActiveSheet
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp;*.tif), *.jpgs;*.gif;*.bmp;*.tif", , _
"Select picture to insert")
iName = Dir("" & fName & "")
If fName = "False" Then Exit Sub
iNameClean = Left(iName, Len(iName) - 4)
iNameExcel = "+Info"
fNameExcel = "F:\path\EXCEL\" & foto.Offset(1, 3).Value & ".xlsx"
With ActiveSheet
.Unprotect Password:="1234"
ActiveSheet.Pictures.Insert(fName).Select
foto.Offset(0, 2).Formula = "=HYPERLINK(""" & fName & """,""" & iNameClean & """)"
foto.Offset(0, 2).Font.ColorIndex = 1 ' preto
foto.Offset(0, 2).Font.Size = 9
foto.Offset(0, 2).Font.Underline = False
foto.Offset(0, 3).Formula = "=HYPERLINK(""" & fNameExcel & """,""" & iNameExcel & """)"
foto.Offset(0, 3).Font.ColorIndex = 1 ' preto
foto.Offset(0, 3).Font.Size = 9
foto.Offset(0, 3).Font.Underline = False
With Selection.ShapeRange
.LockAspectRatio = msoFalse
.Height = ActiveCell.MergeArea.Height
.Width = ActiveCell.MergeArea.Width
.Top = ActiveCell.Top
.Left = ActiveCell.Left
End With
.Protect Password:="1234"
End With
End With
End If
End Sub
Если вы можете [править] название лаконично объяснить *, что делает код *, а также расширить немного об окружающем контексте в теле вопроса, это был бы идеальный вопрос [codereview.se]. Как бы то ни было, это слишком * слишком широкий вопрос по теме для переполнения стека. –
Зачем вам нужно сокращать код? Если вы получите ошибку «слишком большая процедура», просто откройте ее несколькими процедурами. И если размер модуля превышен, тогда распределите свой код через несколько модулей. – Ralph
@Ralph Если вы получили ошибку «слишком большая» процедура, у вас гораздо больше проблем, и вам нужно немного почитать [SRP] (https://en.wikipedia.org/wiki/Single_responsibility_principle) ;-) –