返回列表 上一主題 發帖

[發問] 如何篩選圖片,並插入指定的欄位

回復 22# jackyliu

thisworkbook模組
  1. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  2. If SaveAsUI = True And Cancel = False Then
  3. Dim vbc As Object
  4. With ThisWorkbook.VBProject
  5. For Each vbc In .VBComponents
  6.   Select Case vbc.Type
  7.   Case vbext_rk_Project, vbext_wt_Browser, vbext_ct_MSForm '註
  8.     .VBComponents.Remove .Item(vbc.Name)

  9.   Case Else
  10.     .VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
  11.     .VBComponents(vbc.Name).CodeModule.CountOfLines

  12.   End Select
  13. Next
  14. End With
  15. End If
  16. End Sub


  17. Private Sub Workbook_Open()
  18. Set d = CreateObject("Scripting.Dictionary")
  19. fd = ThisWorkbook.Path & "\" '圖檔目錄
  20. fs = Dir(fd & "*.jpg")
  21. Do Until fs = ""
  22. If InStr(fs, "-") = 0 Then '只有數值
  23.    d(fs) = "H" & Val(fs) + 2 '因為在第列所以加2
  24.    ElseIf Len(fs) - Len(Replace(fs, "-", "")) = 1 Then '只有1個分隔符號
  25.    '第2碼為C就是I欄,否則就在J欄
  26.    V = Split(fs, "-")(1)
  27.      If Split(fs, "-")(1) Like "C*" Then d(fs) = "I" & Val(fs) + 2 Else d(fs) = "J" & Val(fs) + 2
  28.    Else
  29.    '第3碼是1就在K欄,2就在L欄,其餘在M欄
  30.    ar = Split(fs, "-")
  31.    p = IIf(ar(1) = "C", Asc("K"), Asc("L")) '第2碼是C就傳回"K"的字元碼,第2碼是T就傳回"L"的字元碼給變數p
  32.    k = Chr(Val(ar(2)) * 2 + p) '字串變數k的值是第3碼+p對應到的字串(就是欄位)
  33.    d(fs) = k & Val(fs) + 2
  34. End If
  35. fs = Dir
  36. Loop
  37. With Sheets("Sheet1")
  38. .Pictures.Delete '清除所有圖片
  39. Application.ScreenUpdating = False
  40. For Each ky In d.keys
  41.    Set A = .Range(d(ky)) '圖片插入的位置
  42.       With .Pictures.Insert(fd & ky) '插入圖檔
  43.          .ShapeRange.LockAspectRatio = msoFalse '解除長寬比例
  44.          .Top = A.Top
  45.          .Left = A.Left
  46.          .Height = A.Height
  47.          .Width = A.Width
  48.        End With
  49. Next
  50. End With
  51. Application.ScreenUpdating = True
  52. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 24# jackyliu

在ThisworkBook模組內,直接貼入程式碼
開啟檔案時就會自動載入圖片
另存新檔就會自動刪除程式碼另存
學海無涯_不恥下問

TOP

回復 26# jackyliu


    工具/巨集/安全性
勾選信任存取Visual Basic專案
學海無涯_不恥下問

TOP

回復 29# jackyliu

試試看
  1. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  2. If SaveAsUI = True And Cancel = False Then
  3. Dim vbc As Object
  4. With ThisWorkbook.VBProject
  5. For Each vbc In .VBComponents
  6.   If vbc.Type = 1 Then
  7.   .VBComponents.Remove .VBComponents(vbc.Name)
  8.   Else
  9.     .VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
  10.     .VBComponents(vbc.Name).CodeModule.CountOfLines
  11.   End If
  12. Next
  13. End With
  14. End If
  15. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題