Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用连接拉入早期值_Vba_Excel - Fatal编程技术网

Vba 使用连接拉入早期值

Vba 使用连接拉入早期值,vba,excel,Vba,Excel,我的代码在某些情况下有效,但在其他情况下无效 我有以下代码: 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 &

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

我有以下代码:

 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识别出它应该输入较早的值?

您正在使用
ThisIs\u Sheet1\u Test
作为变量来保存值(即使您没有明确声明变量)。您不能仅仅用相同的名称组合一个字符串,并期望它以某种方式知道您想要什么(获取变量中的值)

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

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

    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
    

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

看起来您正在使用我的解决方案逐字逐句地回答前面的问题。 也许,如果您想在一个函数中使用在另一个函数中设置的变量的值,您需要对外声明它


因此,将Dim SheetName作为字符串移动到模块的BIGNING,一直移动到第一行。

您能解释一下此代码的用途吗?我建议进行一些改进,但与其关注现有代码的细节,不如直接切入主题,提出问题的解决方案。是否只是希望将列表框中选定值的列表插入到同一工作表的单元格中?完全正确。我希望所选值显示在sheet1的单元格I5中(我还希望在其他页面中显示其他单元格,但我想如果我可以执行一次,我可以复制表单)。谢谢。你反对输入工作表名称和/或范围并使用它直接写入工作表吗?好吧,最后我想创建一个宏,这样我所要做的就是将代码保存一次(在我的5页中的每一页上,加上每张工作表上的10次),它会自动将代码全部拉到正确的位置。它已经存在了。这只是一个示例,仅显示相关代码。正如下面的答案所说,它看起来像一个变量/字符串/文本问题。我该怎么办?我明白我做错了什么。有没有一种方法可以将顶部的“ThisIs_”&SheetName&“Test”调暗,然后不必担心下面的问题?不确定我的下一步是什么。不,你不能用其他变量组合的名称来声明变量。请参阅上面提到的我的3个其他选项。如何:如果我为每个页面创建名称:例如,ThisIs_Sheet1_测试、ThisIs_Sheet2_测试等。是否有方法创建一个宏,该宏根据页面传递不同的值?如果activesheet=sheet2,那么它将通过ThisIs_sheet2_测试?我想了解有关自定义属性的更多信息。这看起来是最合理的。以下是我提供的更多信息:我有5张工作表,每张工作表上有3个列表框。每个列表框动态填充3到10个值。因此,对于每一张纸,都有三个值,类似于:ThisIs_Sheet1_Test ThisIs_Sheet1_Testing ThisIs_Sheet1_Tested ThisIs_Sheet1_Tested使用您的建议是否可行?我不熟悉,所以越具体越好!谢谢当然,这是可行的。您只需要添加3个不同的自定义属性,每个列表框一个。不过可能有点代码。我仍然在想,你是否可以更轻松地将值存储在电子表格的单元格中?(可能是隐藏在列表框后面的单元格?)那么您所要做的就是
Sheets(“Sheet1”).Range(“B12”).Value