我正在尝试创建一个宏,它会引入工作表的名称并将其与文本结合起来。例如,对于第一张,我希望它在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
答案 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,你只需按原样使用它。