8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

VBA 没有将按钮放置在我想要的位置

user10627299 2月前

41 0

对于我的工作,我有时想自动创建位于特定位置的按钮,具有给定的宽度和高度。我的代码是Sub Add_Button(my_top,my_left,my_Width,my_Height)Dim

为了我的工作,我有时想自动创建位于特定位置、具有给定宽度和高度的按钮。

我的代码是

Sub Add_Button(my_top, my_left, my_Width, my_Height)
Dim myBtn As Object, i As Integer
   Set myBtn = ActiveSheet.Buttons.Add(1, 1, 1, 1)
   With myBtn
      .Top = Cells(my_top, my_left).Top
      .Left = Cells(my_top, my_left).Left
      .Height = Cells(my_top, my_left).Height * my_Height
      .Width = Cells(my_top, my_left).Width * my_Width
      .Caption = text
      End With
End Sub

所以我认为代码非常简单。我用以下代码调用这个 Sub

Sub Test_Add_Button()
my_top = 2
my_left = 60
my_Width = 2
my_Height = 3

Add_Button my_top, my_left, my_Width, my_Height
End Sub

现在我的问题是,当电子表格在主显示器上时,它可以正常工作。但是,当它在我的辅助显示器上时(笔记本电脑显示器,虽然较小,但我想这应该没关系),按钮的位置不正确(见图)。由于我有时必须添加多个按钮,因此手动放置它们并按预期重塑它们非常麻烦。

附加信息(可能重要也可能不重要)-我已将所有单元格的宽度更改为 10 像素。

另外需要注意的是,我将盒子放在右边越远,实际位置和想要的位置之间的差异就越大。

图像:一次在主显示器上创建按钮,一次在右侧(较小的,笔记本电脑)显示器上创建按钮。

帖子版权声明 1、本帖标题:VBA 没有将按钮放置在我想要的位置
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user10627299在本站《excel》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是旧帖子但也许它会对某些人有所帮助。

    在我的例子中,通过 VBA 添加的按钮每次都关闭。这与分辨率或显示器无关,而是由于 ActiveWindow.View 设置而导致位置关闭。我当时使用了 xlPageLayoutView ,当我将其恢复为 xlNormalView ,它又开始工作了。

  • 嗨,欢迎来到 Stack Overflow!您能否详细说明如何解答该问题(包括代码)?

  • 尝试下面的代码;(它插入多个按钮但不是高度调整,而是将其放在活动单元格中,因此无论您在哪个屏幕或显示器上,我都会留在相同的位置)

    Sub ADD_A_BUTTON()
      Dim btn As Button
      Application.ScreenUpdating = False
      ActiveSheet.Buttons.Delete
      Dim t As Range
      For i = 2 To 6 Step 2 'IF YOU ADD MULTIPLE BUTTONS IF ONLY ONE THEN MAKE THE ROW NUMBER YOU WANT TO THE EXACT SAME ROW NUMBER EG. FOR I 2 TO 2 
        Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3)) 'THE COLUMN TO PLACE 
        Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
        With btn
          .OnAction = "btnS"
          .Caption = "Btn " & i
          .Name = "Btn" & i
        End With
      Next i
      Application.ScreenUpdating = True
    End Sub
    
  • 使用此代码添加按钮时我没有遇到任何问题。此代码在三台显示​​器(笔记本电脑和两台台式显示器)上均有效。

    Public Sub Add_Button(Target As Range, Caption As String)
    
        Dim myBtn As Object
    
        Set myBtn = Target.Parent.Buttons.Add(Target.Left, Target.Top, Target.Width, Target.Height)
        myBtn.Caption = Caption
    
    End Sub
    
    Public Sub Test()
    
        Add_Button ThisWorkbook.Worksheets("Sheet1").Range("H2:H5"), "My Button"
    
    End Sub
    
  • @Chronocidal 是对的。尽管 ExcelDevelopers 也说得对,形状更稳定,但我发现它们也受到屏幕分辨率的影响。我构建了一个完整的应用程序,其主要功能是创建包含数据的形状网格。每当有人在具有不同分辨率的屏幕上使用该应用程序时,即使位置是硬编码的,形状也会略有偏移。

  • 是否需要添加 ActiveX 按钮?或者可以使用 Shapes?我发现 Shapes 更稳定。

  • 您的两台显示器的屏幕分辨率是否相同?已知更改分辨率(例如将笔记本电脑与外接显示器对接/断开对接)会导致 ActiveX 按钮的大小和位置出现异常响应

返回
作者最近主题: