Здравствуйте. С Новым годом.
Помогите поправить макрос.
Нашел в интернете макрос, который расставляет иконки по ячейкам.
И в нем диапазон в котором он действует (K11:U37) - задан просто числами (номер столбца и номер строки).
Это очень неудобно.
Я например хочу сменить диапазон - и мне приходится высчитывать и отмерять какой по счету должен быть столбец в новом диапазоне, который мне требуется.
Как задать в начале этого макроса диапазон в обычном численно-буквенном виде K11:U37 (чтобы было проще менять диапазон) ?
Код |
---|
Option Explicit
Dim sl
Sub Расстановка_иконок()
ОчисткаТаблицы2
Dim R, lr, k, pat, I, f
Dim m() As Variant
Dim myPic As Shape
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set sl = CreateObject("Scripting.Dictionary")
pat = ActiveWorkbook.Path
Search2 fso.GetFolder(pat)
k = sl.keys
With ActiveSheet
lr = Cells(Rows.Count, 25).End(xlUp).Row
ReDim m(lr - 6)
m = .Range(.Cells(7, 24), .Cells(lr, 24)).Value
Dim rw&, co&
For rw = 11 To 37 Step 3
For co = 11 To 21 Step 1
For R = 1 To UBound(m)
If Cells(rw, co) = m(R, 1) Then ' если ячейка содержит один из кодов столбца Х
For I = 0 To UBound(k)
If InStr(1, k(I), m(R, 1) & ".", vbTextCompare) > 0 Then 'исправлено, если в столбце X код совпадает с именем файла, рисуем картинку
pat = sl(k(I))
With .Cells(rw, co)
Set myPic = ActiveSheet.Shapes.AddPicture( _
Filename:=pat, _
linktofile:=msoFalse, _
savewithdocument:=msoCTrue, _
Left:=.Offset(0, 0).Left + 1, _
Top:=.Offset(0, -1).Top + 1, _
Width:=.Offset(0, -1).Width - 2, _
Height:=.Offset(0, -1).Height * 3 - 2)
myPic.LockAspectRatio = msoFalse
End With
' картинка нарисована, выходим из цикла по i в цикл по r
GoTo next_r ' исправлено
Else 'если в столбце X код не совпадает с именем файла, рисуем картинку
End If
Next I
End If
next_r:
Next R
Next co
Next rw
End With
End Sub
Function Search2(Fold As Object)
Dim SubFold As Object, Fil As Object
For Each SubFold In Fold.SubFolders
Search2 SubFold
Next SubFold
For Each Fil In Fold.Files
If InStr(1, Fil.Name, ".png", vbTextCompare) > 0 Then
sl(Fil.Name) = Fil.Path
End If
Next Fil
End Function
Sub ОчисткаТаблицы2() 'Очищает таблицу от картинок, чтобы они не наслаивались при каждом срабатывании
Dim pic As Shape
ActiveSheet.Unprotect
For Each pic In ActiveSheet.Shapes
If pic.Type = msoPicture Then
If Not Application.Intersect(pic.TopLeftCell, Range("K11:U40")) Is Nothing Then
pic.Delete
End If
End If
Next pic
End Sub
|