使用连接提取早期值

时间:2010-06-01 12:33:48

标签: excel vba excel-vba

我的代码在某些情况下有效但在其他情况下则无效。

我有这段代码:

 Public Sub ListBox2_LostFocus() 
ListBox2.Height = 15 
   With ListBox2 
   ThisIs_Sheet1_Test = "'" 
   For i = 0 To .ListCount - 1 
        If .Selected(i) Then 
        ThisIS_Sheet1_Test = ThisIs_Sheet1_Test & .List(i) & "','" 
    End If 
Next i 
End With 
ThisIs_Sheet1_Test = Left(ThisIs_Sheet1_Test, Len(ThisIs_Sheet1_Test) - 2) 
End Sub 

产生“ThisIs_Sheet1_Test”。因此,当我运行下面的代码时,它会在列表框中为我提供所选的值。

Public Sub dummy() 
Dim SheetName As String 

SheetName = ActiveSheet.Name 

Sheets("Sheet1").Range("I5", "I5") = ThisIs_Sheet1_Test

End Sub

然而,当我使用

Sheets("Sheet1").Range("I5", "I5") = "ThisIs_" & SheetName & "_Test"

我得到“ThisIs_SheetName_Test”的值,这显然不是我想要的。

如何引入该值,然后让VBA识别它应该提取更早的值?

2 个答案:

答案 0 :(得分:1)

您使用ThisIs_Sheet1_Test作为变量来保存值(即使您没有明确声明变量)。你不能只是组装一个具有相同名称的字符串,并期望它以某种方式知道你想要什么(获取变量中保存的值)。

我假设您正在尝试这样做,因为每张工作表可能有不同的值来跟踪。在这种情况下,这里有几个选项:

  • 明确声明一个公共字符串数组,每个工作表都有足够的值。然后,您可以使用您所在工作表的索引号跟踪每个值。
  • 不使用变量,而是选择隐藏的电子表格单元格来保存值,然后您可以使用Sheets("Sheet1").Range("Z100").Value或类似的东西。这有点“hacky”,也很脆弱(因为如果没有锁定或隐藏,用户可以覆盖单元格),但如果没有其他代码,可能会工作得最好。
  • 使用工作表的“自定义属性”。这看起来像是:

    Dim mySheet As Worksheet
    Set mySheet = ActiveSheet
    
    'mySheet.CustomProperties.Item(1).Delete
    mySheet.CustomProperties.Add "ListboxValues", "one,two,three"
    
    MsgBox mySheet.CustomProperties.Item(1).Name & " = " & _
           mySheet.CustomProperties.Item(1).Value
    

如果你只使用像我的例子一样的自定义属性,它们很容易使用。一旦你有多个,那么你必须循环查找具有正确名称的自定义属性,并使用它。

答案 1 :(得分:0)

看起来你在逐字逐句地使用我的解决方案。 也许如果你想使用你在另一个函数中设置的变量的值,你需要将它声明出来......

因此,将Dim SheetName As String移动到模块的大小,一直到第一行。