使用Excel VBA在文本框中创建公式
有人知道在Excel2010的用户表单中是否可以像公式编辑器一样使用文本框吗 换句话说,当userform启动并且textbox是焦点控件时,允许我键入say使用Excel VBA在文本框中创建公式,vba,excel,excel-2010,Vba,Excel,Excel 2010,有人知道在Excel2010的用户表单中是否可以像公式编辑器一样使用文本框吗 换句话说,当userform启动并且textbox是焦点控件时,允许我键入say =AND( 然后单击单元格D2,然后显示文本框 =AND($D$2 那么a型= =AND($D$2= 然后单击单元格E2 =AND($D$2=$E$2 然后输入) 我已经使用了RefEdit控件,但它只会在工作表上选择一个范围后立即覆盖任何自定义文本,我基本上需要在单击范围时将其附加到文本框中。将此代码放入ThisWorkbo
=AND(
然后单击单元格D2,然后显示文本框
=AND($D$2
那么a型=
=AND($D$2=
然后单击单元格E2
=AND($D$2=$E$2
然后输入)
我已经使用了RefEdit控件,但它只会在工作表上选择一个范围后立即覆盖任何自定义文本,我基本上需要在单击范围时将其附加到文本框中。将此代码放入ThisWorkbook模块:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo EndOfSub
If UserForm1.ActiveControl.Name = "TextBox1" Then
UserForm1.TextBox1.Value = UserForm1.TextBox1.Value & Target.Address
End If
EndOfSub:
End Sub
这样,当您的userform被加载(这里是UserForm1)并且您的textbox处于活动状态(这里是TextBox1)时,所选内容的地址就会附加到它上面。如果还需要添加工作表的名称,请更改上面的第三行:
UserForm1.TextBox1.Value = UserForm1.TextBox1.Value & sh.Name & "!" & Target.Address
若您只需要在一张工作表上使用它,请将代码放在该工作表的代码中,而不是放在该工作簿的代码中
它不像公式编辑器那样复杂,因为它总是附加选择。(如果需要,更改刚刚插入的引用也是可行的,只需进行更多检查。)
请注意,将代码放入this工作簿的SheetChange方法会付出代价:您将无法在此工作簿中使用“撤消”
可以找到一种更优雅的方法来检查是否加载了Userform(此处)[.您可以使用此选项,而不是错误转到部分。是的,这在
文本框中是可能的,但您遇到的问题是,您需要无模式地显示用户表单
,因为在显示用户表单
时,您需要在工作表中选择单元格。如果您想完全按照您所描述的操作,即xt击键为“=”,则需要重新激活UserForm
,否则只需在所选单元格中添加一个“=”
我相信Show
命令不会重新激活已经在显示的无模式UserForm
,我不知道activate
命令用于UserForm
。其他人可能很清楚,但我会使用一些API来完成这项工作。因此UserForm
中的代码可能如下(如果您有Win64和/或VB7,则可能需要调整API声明):
然后,您可以从工作表\u Change
事件调用AppendText
例程,或者在本例中,从工作簿\u sheet selectionchange
事件调用AppendText
例程(该例程用于选择任何工作表中的单元格):
请记住以无模式显示您的UserForm
UserForm1.Show False
如果要在用户窗体打开时将光标置于文本框中
,请也添加此行:
UserForm1.ActivateByCode
(代表问题作者张贴)
检查所选内容是否已更改是我所缺少的。我非常专注于尝试使UserForm正常运行,我完全忽略了Excel必须处理的所有其他事件
最后,我在SelectionChanged子项中进行了检查,以查看是否有一个更简单的用户表单(最小大小,带有textbox和restore按钮),并且textbox是否处于活动状态
我添加了更多的逻辑来处理插入文本框的光标位置以及直接追加。将来可能会添加一些对箭头键的支持,但我有我最初设定的功能
Microsoft,如果您正在收听,是否可以为我们提供一个外观和行为与Excel中内置控件类似的RefEdit控件?只是想一想。您可以研究使用工作表的SelectionChange事件来完成此操作。它是否需要跨工作表工作?是否尝试Application.Inputbox方法?Application.Inputbox方法(“选择单元格”,类型:=8)。它可能对您有所帮助。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If UserForm1.TextBoxHasFocus Then
UserForm1.AppendText Target.Address
'Uncomment the line below if you want sheet name as well as address
'UserForm1.AppendText Sh.Name & "!" & Target.Address
End If
End Sub
UserForm1.Show False
UserForm1.ActivateByCode