【发布时间】:2015-02-08 00:32:30
【问题描述】:
如何在VBA 表单内按给定数量旋转按钮、文本框等内的文本?
【问题讨论】:
-
没有内置方式。您可以做的最好的事情是创建您的按钮并创建一个窄标签 (workwrap=True) 并将该标签分层到您的按钮上。
-
用户表单或工作表? (“表单”不是我认识的术语)
如何在VBA 表单内按给定数量旋转按钮、文本框等内的文本?
【问题讨论】:
您不能直接在 VBA 中执行此操作,但您仍然可以使用 3rd 方 BMP 编辑器通过按钮实现类似的视觉效果(抱歉,文本框是不可能的)。
下一部分主要是概念验证,绝不是完整的解决方案。您需要找到正确的自定义 .ttf 或 .otf 字体文件,然后将其安装在您要使用旋转文本的所有系统上。
根据您想要获得的复杂程度,您实际上可以创建一个等宽字体,其中每个字符旋转 90°,然后使用 VBA 代码在适当的位置插入/删除字符。
我使用了来自http://www.1001fonts.com/vertigo-font.html 的 Vertigo,这是我能找到的唯一 TrueType 字体,无需努力创建自己的字体或付费。我看到这种字体的一个大问题是它不是等宽字体,并且每个字符的高度(例如,下划线 _)不一致,因此您无法正确添加空格或下划线(我意识到这是一个主要缺点,所以您将需要找到/创建自己的字体)。
在 Windows 系统上安装字体:
然后,在 TextBox1 的属性菜单上,滚动到字体,单击 ... 并选择 Vertigo 作为字体系列。此外,将 MultiLine 设置为 true。您需要确保文本框的宽度足够小,一行中只能容纳 1 个字符,并且足够高以容纳整个单词。
结果如下所示:
我意识到使用这种字体,字母是倒着写的,所以我不得不在 KeyDown 和 KeyPress 事件上添加一些基本代码来正确处理基本输入(忽略闪光灯所在的位置,只处理最后一个字符)
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Me.TextBox1.Value = Chr(KeyAscii) & Me.TextBox1.Value
KeyAscii = False
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Then
Me.TextBox1.Value = Mid(Me.TextBox1.Value, 2, Len(Me.TextBox1.Value))
KeyCode = False
End If
End Sub
【讨论】: