ImageResizer / WriteBufferSheet.cls
Laxmikant Nirmohi
read both tabs
38fdd3d
Raw
History Blame Contribute Delete
2.12 kB
Attribute VB_Name = "Sheet3"
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet: Set ws = Me
Dim rng As Range, cell As Range
Dim exts As Variant
Dim pasteRow As Long, pasteCol As Long
Dim buffer As Collection
Dim i As Long
OnDataAreaChanged ws, Target
' 1) intercept only changes in B2:B8
Set rng = Intersect(Target, ws.Range("B2:B" & ws.Rows.Count))
If rng Is Nothing Then Exit Sub
Application.EnableEvents = False
On Error GoTo Cleanup
' 2) valid image extensions
exts = Split( _
"apng,avif,bmp,bpg,cgm,cr2,dib,dng,eps,eps2,eps3,epsf,epsi,exr,flif," & _
"gif,heic,heif,jfi,jfif,jif,jpe,jpeg,jpg,mos,nef,pdf,png,raw,svg,tif," & _
"tiff,vml,webp,xar", ",")
' 3) find top-most row & its column of the pasted block
pasteRow = ws.Rows.Count
pasteCol = rng.Column
For Each cell In rng.Cells
If cell.Row < pasteRow Then pasteRow = cell.Row
Next
' 4) collect only image URLs, then clear originals
Set buffer = New Collection
For Each cell In rng.Cells
Dim txt As String: txt = Trim(CStr(cell.Value))
If txt <> "" Then
If IsImageURL(txt, exts) Then buffer.Add txt
End If
cell.ClearContents
Next
' 5) write them out horizontally from the paste-start
For i = 1 To buffer.Count
With ws.Cells(pasteRow, pasteCol + (i - 1))
.Value = buffer(i)
ws.Hyperlinks.Add Anchor:=.Range("A1"), _
Address:=buffer(i), TextToDisplay:=buffer(i)
End With
Next
Cleanup:
Application.EnableEvents = True
End Sub
Private Function IsImageURL(ByVal url As String, exts As Variant) As Boolean
Dim base As String, e As Variant
If InStr(url, "?") > 0 Then
base = Left$(url, InStr(url, "?") - 1)
Else
base = url
End If
base = LCase(base)
For Each e In exts
If Right$(base, Len(e) + 1) = "." & LCase(e) Then
IsImageURL = True: Exit Function
End If
Next
IsImageURL = False
End Function