VBA userform textbox为不同的文本框输入两次调用的事件

VBA userform textbox为不同的文本框输入两次调用的事件,vba,excel,textbox,userform,Vba,Excel,Textbox,Userform,我有一个excel文件,其中用户使用userform处理数据。 userform设置为框架中包含框架,内部框架中包含文本框 关于这个问题,我找不到任何类似的问题,因此: 我有以下问题,因为焦点首先转到框架内带有Tabindex 1的文本框,而不是用户选择的文本框(在一个框架内有6个文本框可以加载数据)。 用户可以选择6个文本框中的任意一个来更改数据,因此永远不存在选择哪个文本框的确切顺序 请参见下面的userform布局中的零件图片 这造成的问题是,当用户想要更改文本框中的数据时,会将其清空以

我有一个excel文件,其中用户使用userform处理数据。
userform设置为框架中包含框架,内部框架中包含文本框

关于这个问题,我找不到任何类似的问题,因此:

我有以下问题,因为焦点首先转到框架内带有
Tabindex 1
的文本框,而不是用户选择的文本框(在一个框架内有6个文本框可以加载数据)。
用户可以选择6个文本框中的任意一个来更改数据,因此永远不存在选择哪个文本框的确切顺序

请参见下面的userform布局中的零件图片

这造成的问题是,当用户想要更改文本框中的数据时,会将其清空以添加正确的数据

_输入()事件代码:

Private Sub Art1Aan1_Enter()
    Art1Aan1.Text = ""
End Sub
  • 有没有办法阻止这种事情发生
  • 或者我必须在enter事件中建立一个安全检查来检查用户是否真的选择了该文本框
如果选择2,那么我可以找到答案:)

编辑/更新:

初始代码:

Private Sub UserForm_Initialize()
With Protocol.Product
   .AddItem "ID-1"
   .AddItem "ID-3"
   .AddItem "stans+CMI"
   .AddItem "Knip en Plak"
   .AddItem "Test"
End With

With Protocol.Product1
   .AddItem "ID-1"
   .AddItem "ID-3"
   .AddItem "stans+CMI"
   .AddItem "Knip en Plak"
   .AddItem "Test"
End With

With Protocol.Product2
   .AddItem "ID-1"
   .AddItem "ID-3"
   .AddItem "stans+CMI"
   .AddItem "Knip en Plak"
   .AddItem "Test"
End With
OrderKeuze_Lijst
End Sub
Userform开始代码(在带有4个按钮的简单概览Userform中调用):

更新:


因此,内部的数据被清除。

只需更改用户表单中的
选项卡index
,以确保首先选择所需的文本框。请注意,框架还有一个制表位。因此,如果您希望frame1中的textbox1位于第一位,那么frame1需要获得tabstop 0,frame1中的textbox1也应该获得tabstop 0(零)。此外,您甚至可以在不想更改(或完全禁用)的文本框中将
TabStop
设置为false。最后,您可以使用帧事件来确保焦点位于您希望的位置:
Art1Aan1.SetFocus
@ralph我也会编辑我的问题,但问题是有6个文本框,其中部分或全部加载了数据。用户可以选择任何要更改的文本框。每次用户使用userform时,这可能会有所不同,因此更改tabindex是没有用的,因为它永远不知道将选择哪个文本框。不幸的是,我不理解这个问题。不过,如果你想阻止某些事情发生,就不要编写代码。因此,您可以选择在输入时清空哪个文本框。每个文本框在输入和退出时都有一个单独的
事件。因此,您可以使用这些事件(分别针对每个文本框)来控制每个文本框在进入和退出时发生的情况。另一个问题是“用户点击一个东西,不同的东西会得到关注”,我无法解释。我从来没有听说过类似的事情。当我点击某个东西时,通常会得到焦点。@Ralph我为每个文本框(需要它)都有一个enter
事件(上面的3行代码在每个文本框中更改)。问题在于,出于某种原因,VBA/Excel将焦点放在带有
tabindex 1
的文本框上,即使用户选择了带有
tabindex 4
的文本框。就像你一样,这是我第一次遇到这个问题,我不知道为什么会发生。@Ralph我应该重新表述我的问题,更详细地解释发生了什么,以便更好地理解这个问题吗?或者它只是一个复杂的问题吗?只需在您的UserForm中更改
选项卡index
,以确保首先选择所需的文本框。请注意,框架还有一个制表位。因此,如果您希望frame1中的textbox1位于第一位,那么frame1需要获得tabstop 0,frame1中的textbox1也应该获得tabstop 0(零)。此外,您甚至可以在不想更改(或完全禁用)的文本框中将
TabStop
设置为false。最后,您可以使用帧事件来确保焦点位于您希望的位置:
Art1Aan1.SetFocus
@ralph我也会编辑我的问题,但问题是有6个文本框,其中部分或全部加载了数据。用户可以选择任何要更改的文本框。每次用户使用userform时,这可能会有所不同,因此更改tabindex是没有用的,因为它永远不知道将选择哪个文本框。不幸的是,我不理解这个问题。不过,如果你想阻止某些事情发生,就不要编写代码。因此,您可以选择在输入时清空哪个文本框。每个文本框在输入和退出时都有一个单独的
事件。因此,您可以使用这些事件(分别针对每个文本框)来控制每个文本框在进入和退出时发生的情况。另一个问题是“用户点击一个东西,不同的东西会得到关注”,我无法解释。我从来没有听说过类似的事情。当我点击某个东西时,通常会得到焦点。@Ralph我为每个文本框(需要它)都有一个enter
事件(上面的3行代码在每个文本框中更改)。问题在于,出于某种原因,VBA/Excel将焦点放在带有
tabindex 1
的文本框上,即使用户选择了带有
tabindex 4
的文本框。就像你一样,这是我第一次遇到这个问题,我不知道为什么会发生。@Ralph我应该重新表述我的问题,更详细地解释发生了什么,以便更好地理解这个问题吗?或者它只是一个复杂的问题?
Private Sub Protbutton_Click()
    Protocol.Show
End Sub