如何将UserForm值用于多个事物

时间:2015-01-18 20:46:44

标签: vba excel-vba excel-2007 excel-2013 userform

我有UserForm1,它是一个多用户表单,我试图访问通过Module1中的子表单中收集的信息。这个子将需要访问几个不同的值,并使用这些值做不同的事情,所以这将是一个多部分问题。

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

  2. For X = 1 To UserForm1.LocalOffer.Value
    
    1. 这个问题的第二部分来自上面的For Next循环。我在哪里有以下代码。理想情况下,这将允许我从userform循环一系列类似命名的文本框。甚至不确定这是否会起作用,因为代码在到达该部分之前一直在破坏。

    2. Range("B" & X).Value = UserForm1.Controls("LocalTier" & Tier).Value 
      
      1. 这个问题的最后一部分如果我在userform中有一个包含日期格式为1/18/2015的日期的文本框,那么我有一种方法可以抓住该日期的一部分,比如说只是当天或者只是今年的最后一位数?
      2. 我正在使用Excel 2013,但该文件将在Excel 2007上运行

        编辑: 事实证明,问题1是通过不使用X按钮关闭用户窗体而是通过添加一行来在最后一个按钮时隐藏用户窗体来修复的。事实证明我的第二个问题的代码在我过去的时候工作得很好。唯一剩下的问题是最后一个我没有想法的问题。

1 个答案:

答案 0 :(得分:1)

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

这个问题的最后一部分如果我在userform中有一个包含日期格式为1/18/2015的日期的文本框,我有办法抓住那个日期的一部分,例如一天或只是一年中的最后一位数?

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

字符串操作

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

例如:

last_digit_of_the_year = Right(myDateTextbox.Text, 1)

将返回字符串的最后一个字符。另一方面:

first_digit = Left(myDateTextBox.Text,1)

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

日期转换

您只需使用CDate()功能将字符串转换为日期即可。请注意,如果传递无效字符串,此函数将返回错误。如果您的文本框包含24/01/1990,则可以先将字符串转换为日期:

myDate = CDate(myDateTextBox.Text)

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

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

请注意, CDate会根据系统的区域设置识别日期格式。。因此,如果TextBox中的格式与您的系统中的格式不同,则考虑在之前操作字符串以使其适应正确的格式。例如,如果您的系统具有DD / MM / YYYY设置且文本框显示MM / DD / YYYY类型,则可以按如下方式“调整”:

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

如果wrongFormat1/18/2014,但您的系统希望将其读作18/1/2014,那么它现在已经很好了,因为goodFormat将等于18/1/2014之后分裂和重建。