2013-07-08 122 views
0

我有一個執行許多函數並能正常工作的宏,但按鈕在兩種情況之一中調整大小。當宏使用一個自動過濾器時,這些按鈕會發生變化,這會自動刪除大約500行數據(按鈕變得更大),而且在我運行程序之前首次粘貼數據時,它們也會調整大小(再次變大)。我試圖進入屬性並選擇「不要移動或使用單元格大小」來定位對象。我也嘗試鎖定按鈕的長寬比。但是沒有保持按鈕的大小。我還有什麼可以嘗試的想法?在excel-vba上粘貼的按鈕大小調整

+0

我在舊的(?2003)的Excel此之前見過。不知道您使用的是哪個版本,但是如果我沒有記錯的話,您可以通過設置格式控制|打印對話框中的「打印對象」複選框來解決此問題。屬性。否則,您可以修改代碼以在運行時捕獲按鈕的初始維度,並強制/確保這些維度在「Exit Sub」語句之前設置。 –

+0

我使用excel 2010.打印對象複選框也被選中,所以它聽起來像我可能不得不修改代碼。謝謝 – Mike

+0

沒問題。應該很容易做到這一點,只需獲取按鈕的'.Left','.Top','.Height'和'.Width',並確保在代碼末尾重置這些。如果您遇到任何問題,請在此發佈您的代碼,我們可以嘗試提供幫助! –

回答

2

我認爲這應該做的伎倆。

我以前見過的另一件事是,如果按鈕更改,字體大小有時會發生變化。我包括這個,但留下了它的評論。您可能還需要/不需要重置按鈕的位置.TopLeftCell,其中也包括在內,但在下面的代碼註釋:

'## Add the following to your existing macro: 
Dim btn As Shape 
Dim btLeft As Double, btTop As Double, btWidth As Double, _ 
    btHeight As Double, btFontSize As Double 
Dim btCell As Range 

'## Put this block of code before your existing code: 
Set btn = ActiveSheet.Shapes("Button 3") '## Modify to your button name 
With btn 
    btLeft = .Left 
    btTop = .Top 
    btHeight = .Height 
    btWidth = .Width 
    'btFontSize = TextFrame2.TextRange.Font.Size 
    'Set btCell = btn.TopLeftCell 
End With 

'Your code goes here: 
' 
' 
' 
'End of your code 

'## Put this block of code before the Exit Sub statement/after your existing code 
With btn 
    '.TopLeftCell = btCell 
    '.TextFrame2.TextRange.Font.Size = btnFontSize 
    .Left = btLeft 
    .Top = btTop 
    .Height = btHeight 
    .Width = btWidth 
End With 
+0

謝謝你完美的作品。 – Mike

+1

+1。回答一個類似的問題,上面David的答案涵蓋了這個答案中的選項2:http://stackoverflow.com/a/11532902/138938 –

+1

+1 @HeadofCatering提供更多選擇。我最近也親自使用過您的選項4。宏的形狀看起來最可靠,不容易出現這種奇怪的行爲。 –