2011-05-13 181 views
3

我有一個從目錄中導入圖像,並將其放置在由大小剛好在Excel中 - 刪除行時刪除照片

宏觀的片段,以適應像Excel單元格宏低於: -

'Set the Row Height and Column Width of the thumbnail 

Range("A" & CStr(currRow)).RowHeight = ThumbnailSizeRef + 2 

Columns("A").ColumnWidth = (ThumbnailSizeRef - 5)/5 'Column Width uses a font width setting, this is the formula to convert to pixels 

'Add the thumbnail 
Set sShape = ActiveSheet.Shapes.AddPicture(Filename:=sFilename, LinktoFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=ThumbnailSizeRef, Height:=ThumbnailSizeRef) 

'Set the Left and Top position of the Shape 
sShape.Left = Range("A" & CStr(currRow)).Left + ((Range("A" & CStr(currRow)).Width - sShape.Width)/2) 

sShape.Top = Range("A" & CStr(currRow)).Top + ((Range("A" & CStr(currRow)).Height - sShape.Height)/2) 

這一切工作正常。圖像根據需要正確顯示在單元格中。我也可以成功地對單元格進行排序,並且圖像可以正確移動。

我遇到的問題是當我刪除整行(右鍵單擊行並刪除)...在這種情況下,來自行Im刪除的圖像跳下來並隱藏在下一行的圖像後面。

有什麼辦法,當我刪除圖像被刪除的行?

回答

5

你可以改變你的圖片屬性「移動和大小與細胞」。因此,當你刪除你的行時,你的圖片也會被刪除。 在Excel 2007

測試的另一種方法是添加評論並填寫背景圖片(在這裏看到更多的信息:http://www.excelforum.com/excel-general/569566-embed-image-in-cell.html

+0

謝謝,我給'移動和大小與細胞'一槍。此外,可能應該在我原來的帖子中提到,除了添加縮略圖外,我還在評論中添加了較大版本圖片的評論,因此當您將鼠標懸停在縮略圖上時會彈出較大的圖片。出於好奇心我想知道每個單元格是否可以有兩個註釋(不這麼認爲),或者以某種方式設置一個小的註釋,以便始終顯示在單元格中,然後在將鼠標懸停在單元格上時將其重新調整爲較大的註釋大小?我不知道你將如何捕捉懸停在一個單元格上? – David 2011-05-16 12:13:22

+0

大衛,如果這個答案是你正在尋找的,你可以接受它。謝謝。 – JMax 2011-05-16 12:18:27

3

可能有更好的方法,但我可以考慮2個解決方法。

  1. 在導入形狀的細胞,具體名稱以命名約定標識行/列(例如,請將.Name =「ImageX的-RowY-ColumnZ」)的形狀。然後使用工作表更改事件和此鏈接Capture Deleted Rows來循環顯示形狀,並根據刪除的內容刪除所需的形狀。

  2. 另外,填充評論框與你的形象,當行被刪除註釋&形象也消失

Sub test() 
ThumbnailSizeRef = 100 
currRow = 5 
sFilename = "C:\Users\....\Desktop\Untitled.png" 

Range("A" & CStr(currRow)).RowHeight = ThumbnailSizeRef + 2 

Columns("A").ColumnWidth = (ThumbnailSizeRef - 5)/5 

With Sheet1 
    With .Range("A" & currRow) 
     .ClearComments 
     .AddComment 

     With .Comment 
     .Visible = True 
     .Text Text:="" 
     .Shape.Left = Sheet1.Range("A" & currRow).Left 
     .Shape.Top = Sheet1.Range("A" & currRow).Top 
     .Shape.Width = Sheet1.Range("A" & currRow).Offset(0, 1).Left - Sheet1.Range("A" & currRow).Left 
     .Shape.Height = Sheet1.Range("A" & currRow).Offset(1, 0).Top - Sheet1.Range("A" & currRow).Top 
     .Shape.Fill.UserPicture sFilename 
     .Shape.Line.ForeColor.RGB = RGB(255, 255, 255) 'hides connector arrow 

     End With 

    End With 
End With 

End Sub 
+0

感謝您的答覆。 Capture Deleted Rows鏈接看起來非常有用。我會看看我如何使用「移動和使用單元格大小」,但已經爲它添加了書籤,因爲我認爲它將在未來很方便。看到我上面的評論,重新: - '評論'。你知道是否可以立即調整評論的大小? – David 2011-05-16 12:19:28

1

這是不完美的,但它可能滿足您的需求,或者至少讓您朝着正確的方向前進。

將此代碼放入工作表模塊中。當一個事件改變整行時,它將刪除找到的左上方單元格在該行中的第一個形狀。如果您要刪除某一行,這將起作用,但如果您剪切了一行,也會觸發該行,這是不需要的。如果你不打算切割和粘貼行,那不是問題。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim pic As Shape 
    If Union(Target, Target.EntireRow).Address = Target.Address Then 
     For Each pic In ActiveSheet.Shapes 
      If pic.TopLeftCell.Row = Target.Row Then 
       pic.Delete 
       Exit For 
      End If 
     Next pic 
    End If 
End Sub 
+0

它看起來像在osknows的答案鏈接捕獲刪除行代碼處理我提到的問題。 – 2011-05-13 13:14:58