2015-01-24 11 views
0

Я пытаюсь написать программу в VBA, которая принимает до 22 пользовательских ввода и создает и называет лист для каждого ввода.Имя excel листы с переменными в VBA

У меня есть Userform, который устанавливает переменную в ничто при ее инициализации. Я имею проблемы, пытающиеся:

  1. создать новый лист, только если пользователь кладет что-нибудь в этом переменном и
  2. Именования листа с их вводом.

Вот то, что я до сих пор

Public Part(1 to 22) as String 

Sub Start() 

Application.ScreenUpdating = False 

For i = 1 To 22 
    If Part & i = "" Then 

    Else 
     Sheets.Add , after:=Worksheets(Worksheets.Count - 2) 
     ActiveSheet.Name = Part & i    
    End If 

Next i 

Application.ScreenUpdating = True 

End Sub 

Вот где значения добавляются к переменной. PartNumber1 - 22 - это названия текстовых полей в пользовательской форме

Private Sub UserForm_Initialize() 

PartNumber1.Value = "" 
PartNumber2.Value = "" 
PartNumber3.Value = "" 
PartNumber4.Value = "" 
PartNumber5.Value = "" 
PartNumber6.Value = "" 
PartNumber7.Value = "" 
PartNumber8.Value = "" 
PartNumber9.Value = "" 
PartNumber10.Value = "" 
PartNumber11.Value = "" 
PartNumber12.Value = "" 
PartNumber13.Value = "" 
PartNumber14.Value = "" 
PartNumber15.Value = "" 
PartNumber16.Value = "" 
PartNumber17.Value = "" 
PartNumber18.Value = "" 
PartNumber19.Value = "" 
PartNumber20.Value = "" 
PartNumber21.Value = "" 
PartNumber22.Value = "" 


End Sub 

Private Sub PartNumDone_Click() 


Part(1) = PartNumber1.Value 
Part(2) = PartNumber2.Value 
Part(3) = PartNumber3.Value 
Part(4) = PartNumber4.Value 
Part(5) = PartNumber5.Value 
Part(6) = PartNumber6.Value 
Part(7) = PartNumber7.Value 
Part(8) = PartNumber8.Value 
Part(9) = PartNumber9.Value 
Part(10) = PartNumber10.Value 
Part(11) = PartNumber11.Value 
Part(12) = PartNumber12.Value 
Part(13) = PartNumber13.Value 
Part(14) = PartNumber14.Value 
Part(15) = PartNumber15.Value 
Part(16) = PartNumber16.Value 
Part(17) = PartNumber17.Value 
Part(18) = PartNumber18.Value 
Part(19) = PartNumber19.Value 
Part(20) = PartNumber20.Value 
Part(21) = PartNumber21.Value 
Part(22) = PartNumber22.Value 



End Sub 

Спасибо!

+0

Используйте * массив *, а не набор * строки * varialbes –

ответ

1

Использование массивов. Вот пример. PseudoUserform() запускается первая:

Public Part(1 To 22) As String 

Sub PseudoUserform() 
    Part(6) = "James" 
    Part(8) = "Ravenswood" 
End Sub 

Sub Start() 
Application.ScreenUpdating = False 
For i = 1 To 22 
    If Part(i) = "" Then 
    Else 
     Sheets.Add after:=Worksheets(Worksheets.Count - 2) 
     ActiveSheet.Name = Part(i) 
    End If 
    Next i 
Application.ScreenUpdating = True 
End Sub 
+0

Это работает немного лучше. Теперь он создал лист с именем. Но на второй итерации он зацепился за «ActiveSheet.Name = Part (i)». Он не должен туда идти, потому что часть (2) была пуста. – csmith711

+0

** Убедитесь, что * Part (2) * действительно пуст, а не содержит один пробельный символ. ** –

+0

Вот мой код, в который добавлено значение. (извините, я относительно новый vba) – csmith711

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