2013-07-08 120 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。宏的形状看起来最可靠,不容易出现这种奇怪的行为。 –