2010-05-27 42 views
0

我正在尝试创建一个宏,该工作表中带有该表的名称并将其与文本组合在一起。例如,对于表1,我希望它在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

回答

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 
+0

每个页面的范围是不同的我怎样才能改变它 另外,如果我拿出来,我可以使用我的代码来显示表格名称“ThisIs_”和“_Test”。所以我不确定你提到的字符串/对象是否有区别。 – Daniel 2010-05-28 12:20:25

+0

对不起,Daniel,我没有注意范围的变化。如果您已经对表格名称进行了硬编码(例如Sheets(“Sheet1”)),为什么不只是使用 表格(“Sheet1”)。Range(“I5”)。Value =“ThisIs_Sheet1_Test” 我得到当我尝试编译你的代码时,“invalid qualifier”意味着没有String变量的Text属性。我们必须错过一些东西。 – 2010-05-28 15:09:34

+0

你上面看到我的答案了吗?我不确定它为什么如此,但现在我遇到了一个全新的问题! – Daniel 2010-05-28 15:35:00

2

看起来像一个报价问题。 ThisIs__Test是字符串,对吧?所以行情应该是他们身边,不在身边& SheetName.text &

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

糟糕,好的呼叫,越来越近......看看我上面的回答 – Daniel 2010-05-28 13:47:31

0

我能够得到它的工作......有点。现在

,它显示ThisIS_Sheet1_Test在Sheet1等

不过,我把它设置为从一个列表框提取数据到一个我称之为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 

为什么当我得到的文本,我希望它不会转化为函数I认为它会。

0

在寻找其他人的帮助之前,您可以花几分钟编译代码(在VBA窗口中,调试 - >编译VBA项目)?那会尖叫遗漏了您的报价,对变量的字符串等

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 

下划线携带VBA/VB世界特殊含义使用。文本。它的代码concatination(意思是如果你的代码太长,并且你想要将它分成两行,那么你把一个空格用下划线(_)和下一行继续,还有Dick Kusleika是关于对象/字符串的。将有不同的peopreties(.Text意味着您要求该对象的Text属性),并且通常该Text属性将是String类型。在这里您已经有一个字符串,并且您将它原样使用。

+0

我想技术上这个问题已被回答。但出来它出生了一个新的问题: http://stackoverflow.com/questions/2949739/pull-in-earlier-value-using-concatenation – Daniel 2010-06-01 12:34:52