我正在使用一個小的宏來添加和刪除受保護的工作表中的行。爲此,每行都有一個「刪除」按鈕。添加新行時,會複製最後一行(包括「刪除」按鈕),然後清除其內容。ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row返回錯誤的行
對於刪除行,我交出了一些參數,包括「刪除」按鈕的(因此是項目的)行。爲此,我使用:
RowToDelete = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
此代碼正常工作對現有的生產線,但它會失敗以來的工作簿上次打開(除了最後一個)添加的所有線路。對於所有其他它將刪除添加的下一行,而不是「真正的」。
我想這是一個緩存問題,因爲「Application.Caller」包含正確的字符串,但會返回不再攜帶該名稱的複製形狀的行。
有沒有辦法清除相關緩存或強制Shapes()不使用緩存?
非常感謝您的幫助。
當你創建你的形狀給他們他們連接到的行的名稱(名稱屬性)。對於在現有的行之間添加的行,只需向最後一行運行一個循環並更改它們的名稱,然後將+1加到形狀的數字部分 – 2013-05-21 11:26:02
這或多或少是我所做的問題,即「ActiveSheet.Shapes (Application.Caller).TopLeftCell.Row將返回錯誤形狀的行,假設我們從行A和Shape1開始,並添加了Shape2(Shape1的副本)和Shape3(Shape2的一個副本)的2行B和C,那麼如果按下了Shape2,上面的代碼將返回Shape3的行而不是Shape2 –
如果你的按鈕是一個ActiveX控件,它將不會在行被刪除的同時被刪除(添加一個'ActiveSheet.Shapes(Application .Caller).delete'在這種情況下)與表格控制按鈕,該按鈕會自動刪除在同一時間行比我說的是,你可能有幾個按鈕堆疊在相同的位置(舊按鈕作爲好吧) –