2010-05-27 63 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