2010-05-27 4 views
0

Я пытаюсь создать макрос, который вводит имя листа и объединяет его с текстом. Например, для первого листа я хочу, чтобы он сказал «ThisIs_Sheet1_Test» в I5 листа 1. Есть несколько листов, но они должны работать для всех.Конкатенация дает ошибку с подчеркиванием

Что не так с моим кодом? Я думаю, что подчеркивание может испортить все это. Вот что у меня есть:

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

+0

Извините, Даниэль, я не обратите внимание на изменения диапазона. Если вы уже жестко кодируете имя листа (например, «Листы» («Лист1»), почему бы вам не использовать только Листы («Лист1»). Диапазон («I5»). Значение = «ThisIs_Sheet1_Test» Я получаю «недопустимый квалификатор», когда я пытаюсь скомпилировать ваш код, а это значит, что нет свойства Text переменной String. Нам что-то не хватает. –

+0

Вы видели мой ответ выше? Я не уверен, почему это работает, но теперь у меня есть совершенно новая проблема! – Daniel

2

выглядит цитируемости проблемы. ThisIs_ и _Test - это строки, верно? Таким образом, котировки должны быть вокруг них, а не вокруг & SheetName.text &

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

Oops , хороший вызов. Подходим ближе ... см. мой ответ выше. – Daniel

0

Я могу заставить его работать ... вроде.

Теперь он отображает ThisIS_Sheet1_Test в Лист1 и т.д.

Однако, у меня есть это настроить для извлечения данных из выпадающего списка в функции, которую я назвал 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, Debug-> Compile VBA Project), прежде чем искать помощь другого? Это было бы кричали о своих отсутствующих котировках, используя .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 

Подчеркивание несет особое значение в VBA/VB мире. Его конкатенация кода (это означает, что если ваш код слишком длинный, и вы хотите разделить его по двум строкам, тогда вы помещаете пробел (_) и продолжаете следующую строку. А также Dick Kusleika прав об объекте/строке. Только для объектов, которые вы (.Text означает, что вы запрашиваете свойство Text этого объекта), и обычно свойство Text будет иметь тип String. Здесь у вас уже есть String, и вы просто используете его как есть.

+0

Я думаю, технически на этот вопрос был дан ответ. Но из этого возник новый вопрос: http://stackoverflow.com/questions/2949739/pull-in-earlier-value-using-concatenation – Daniel

Смежные вопросы