我的代码在某些情况下有效但在其他情况下则无效。
我有这段代码:
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识别它应该提取更早的值?
答案 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移动到模块的大小,一直到第一行。