- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
4#
發表於 2014-11-5 21:55
| 只看該作者
本帖最後由 luhpro 於 2014-11-5 22:10 編輯
回復 3# justinbaba
For Each E In .Cells.Columns(i)
實測發現 .Columns(i) 後面沒有加上 .Cells ,
會變成指定整欄而非單個儲存格,
所以會有錯誤.
不過這與我預期的結果不同,
使用Range變數透過 For Each 對整欄的元素做逐一處理,
解析後處理的元素卻還是整欄?
我有些納悶.
至於那行 Mypath = "\C:\Users\leon\Desktop\Test\" 怪怪的,
C: 前面不應該有 \ 出現.
觀察你的程式對整個工作表的每一列都有做高度設定,
這應該不是你想要的結果.
建議限制程式實際會作用到的範圍,
避免有非所預期甚至是多餘的動作拖長作業時間,
這個可用 .Cells(Rows.Count, l).End(xlUp).Row 方式來取得最底端有資料的列號.
還有對用於 列號 表示的變數,
建議不論實際上會使用到多大的列號,
都要 "養成習慣" 一律設為 Long 而非 Integer,
因為會有 溢位(超過可表示數字的最大值) 的風險.
最後這兩行 :
E.ColumnWidth = 25 '調整儲存格寬度
E.RowHeight = 50 '調整儲存格高度
設定的寬度是作用到存放圖檔名稱的儲存格,
而非放置圖片的儲存格,
我猜應非你想要的結果.
建議改為
E.Cells(1, 2).ColumnWidth = 25 '調整儲存格寬度
E.Cells(1, 2).RowHeight = 50 '調整儲存格高度
綜上所述建議程式修改如下- Sub ChangeSize()
- Dim Mypath As String, E As Range, l As Long, m As Long ', MyPic As Object
- Mypath = "C:\Users\user12\Pictures\"
- With Sheets("照片索引")
- .Pictures.Delete
- For l = 1 To 7 Step 3 'A欄 ->1,D欄 ->4,G欄 ->7
- m = .Cells(Rows.Count, l).End(xlUp).Row
- For Each E In Range(.Cells(1, l), .Cells(m, l)) ' 'A欄 ->1,D欄 ->4,G欄 ->7
- E.Cells(1, 2).ColumnWidth = 25 '調整儲存格寬度
- E.Cells(1, 2).RowHeight = 50 '調整儲存格高度
- If Dir(Mypath & E & ".jpg") <> "" Then
- 'Set MyPic = ActiveSheet.Pictures.Insert(Mypath & E & ".jpg")
- With .Pictures.Insert(Mypath & E & ".jpg")
- .ShapeRange.LockAspectRatio = msoFalse
- .Left = E.Cells(1, 2).Left
- .Top = E.Cells(1, 2).Top
- .Width = E.Cells(1, 2).Width '=儲存格寬度
- .Height = E.Cells(1, 2).Height '=儲存格高度
- End With
- End If
- Next
- Next
- End With
- End Sub
複製代碼 |
|