如何将用户窗体值用于多个事物

How to use UserForm Values for multiple things

我有 UserForm1,它是一个多页用户窗体,我正在尝试访问通过位于 Module1 中的子窗体中的窗体收集的信息。此子将需要访问多个不同的值并使用这些值执行不同的操作,因此这将是一个多部分问题。

  1. 我有下面的代码,我在其中尝试使用其中一个值作为 For Next 循环的上限。然而,当前的问题是,当代码到达这一行时,它会跳转到 Userform_Initialize 例程。

For X = 1 To UserForm1.LocalOffer.Value
  1. 这个问题的第二部分来自上面的 For Next 循环内部。我有以下代码的地方。理想情况下,这将允许我从用户窗体中循环浏览一系列名称相似的文本框。甚至不确定这是否会起作用,因为代码在到达该部分之前一直在中断。

Range("B" & X).Value = UserForm1.Controls("LocalTier" & Tier).Value 
  1. 这个问题的最后一部分,如果我在用户窗体中有一个文本框,其中包含格式为 1/18/2015 的日期,我有没有办法只获取该日期的一部分,例如只获取日期或者只是年份的最后一位数字?

我正在使用 Excel 2013,但文件将在 Excel 2007

运行

编辑: 事实证明,问题 1 已通过不使用 X 按钮关闭用户窗体而是添加一行以在您点击最后一个按钮时隐藏用户窗体来解决。事实证明,一旦我通过了第二个问题,我的代码就可以正常工作了。只剩下最后一个问题了,我没有想法。

从评论来看,我看到您不再需要了解第 1 点和第 2 点,因此我将把我的回答限制在第 3 点。

这个问题的最后一部分,如果我在用户窗体中有一个文本框,其中包含格式为 1/18/2015 的日期,有没有办法让我只获取该日期的一部分说例如只是日期还是年份的最后一位?

您可以使用字符串操作或日期转换。 假设文本框名为 myDateTextbox

字符串操作

在 VBA 提供的字符串操纵器中,我会引用 Left()Right().

例如:

last_digit_of_the_year = Right(myDateTextbox.Text, 1)

将return你字符串的最后一个字符。另一方面:

first_digit = Left(myDateTextBox.Text,1)

将return你的字符串的第一个数字。 您可以使用内置的 Len(myDateTextBox.Text) 来 return 字符串的当前长度。

日期转换

您可以使用 CDate() 函数简单地将字符串转换为日期。请注意,如果您传递无效字符串,此函数将 return 出错。如果您的文本框包含24/01/1990,您可以先将字符串转换为日期:

myDate = CDate(myDateTextBox.Text)

因此,您可以像这样检索日、月或年:

myYear = Year(myDate)
myMonth = Month(myDate)
myDay = Day(myDate)

请注意 CDate 根据您系统的区域设置识别日期格式。。因此,如果 TextBox 中的格式与您系统中的格式不同,请考虑在 before 之前处理字符串以使其适应正确的格式。例如,如果您的系统设置 DD/MM/YYYY 并且您的文本框显示 MM/DD/YYYY 类型,您可以 "adjust it" 如下:

wrongFormat = myDateTextBox.Text
splittedDate = Split(wrongFormat,"/")
goodFormat = splittedDate(1) & "/" & splittedDate(0) & "/" splittedDate(2)

如果 wrongFormat1/18/2014 但您的系统希望将其读取为 18/1/2014,现在可以了,因为 goodFormat 将等于 18/1/2014拆分后重建。