连接会产生下划线错误

时间:2010-05-27 20:31:24

标签: vba excel-vba excel

我正在尝试创建一个宏,它会引入工作表的名称并将其与文本结合起来。例如,对于第一张,我希望它在Sheet1的I5中说“ThisIs_Sheet1_Test”。有几张,但它应该适用于所有这些。

我的代码出了什么问题?我认为下划线可能会破坏这一切。这就是我所拥有的:

Dim SheetName As String

Public Sub CommandButton1_Click()

SheetName = ActiveSheet.Name

Sheets("Sheet1").Range("I5", "I5") = ThisIs_" & SheetName.text & "_Test
Sheets("Sheet2").Range("H5", "H5") = ThisIs_" & SheetName.text & "_Test
Sheets("Sheet3").Range("G5", "G5") = ThisIs_" & SheetName.text & "_Test

End Sub

此问题已转发至Pull in Earlier Value Using Concatenation

4 个答案:

答案 0 :(得分:2)

看起来像一个引用问题。 ThisIs__Test是字符串,对吗?所以引号应该在它们周围,而不是& SheetName.text &

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

答案 1 :(得分:1)

除了缺少的引号之外,SheetName是一个字符串,而不是一个对象,因此它不具有Text属性。您是否希望在工作表更改时更改工作表的名称?你需要这个:

Private Sub CommandButton1_Click()

    Dim ws As Worksheet

    For Each ws In Me.Parent.Worksheets
        ws.Range("I5").Value = "ThisIs_" & ws.Name & "_Test"
    Next ws

End Sub

答案 2 :(得分:0)

我能够让它发挥作用......那种。

现在,它在Sheet1等中显示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

当我得到我想要的文本时,为什么它不会转换为我认为它的功能。

答案 3 :(得分:0)

在寻找其他人的帮助之前,您可以花几分钟时间编译代码(在VBA窗口,调试 - >编译VBA项目中)吗?如果在字符串变量等上使用.Text,那就会对你的缺失引号尖叫。

Public Sub dummy()
Dim SheetName As String

SheetName = ActiveSheet.Name

Sheets("Sheet1").Range("I5", "I5") = "ThisIs_" & SheetName & "_Test"
Sheets("Sheet2").Range("H5", "H5") = "ThisIs_" & SheetName & "_Test"
Sheets("Sheet3").Range("G5", "G5") = "ThisIs_" & SheetName & "_Test"

End Sub

Underscore在VBA / VB世界中具有特殊含义。它的代码连接(意思是如果你的代码太长而你想要将它分成两行,那么你放一个空格下划线(_)并继续下一行。而且Dick Kusleika对于对象/字符串也是正确的。仅对于对象你将有不同的peopreties(.Text意味着你要求该对象的Text属性),并且通常Text属性将是String类型。这里你已经有了一个String,你只需按原样使用它。