2014-10-21 5 views
0

Я создал прославленный экземпляр и вставку макроса, который копирует импортированную информацию с рабочего листа «шаблон» в рабочие листы определенных мест.
(поэтому у меня есть рабочие листы с именами LOCATION1 LOCATION2 Location3 location4 и шаблон)
Рабочий лист как переменная?

В настоящее время мой код выглядит следующим образом: (но намного дольше и более повторяющихся)

Sheets("Template").Select 
Range("P24:Q30").Select 
Selection.Copy 
Sheets("location1").Select 
Range("P24").Select 
ActiveSheet.Paste 

Я хочу «LOCATION1» как переменная рабочего листа.

Мне нужен способ для изменения, без необходимости изменять код для каждого другого шаблона.
Насколько я вижу, есть два решения.

  1. В шаблоне есть ячейка, содержащая значение имени листа, на которое должна быть вставлена ​​информация. Если бы я мог установить это равным переменной рабочего листа, которую я могу написать вместо «Location1»
  2. Попросите пользователя выбрать лист местоположения из списка при запуске макроса.

Я не знаю, как это сделать, и я не знаю, что было бы лучше.

ответ

1

Во-первых, удаление select, как правило, хорошая вещь:

Sheets("Template").Range("P24:Q30").Copy Sheets("location1").Range("P24") 

Если имя вкладки находится в ячейке 'B1' шаблона листа, вы можете использовать:

dim sTabName as String 

sTabName=Sheets("Template").[B1] 
Sheets("Template").Range("P24:Q30").Copy Sheets(sTabName).Range("P24") 

Вы также можете создайте реальную переменную для своего рабочего листа, например

dim shtDest as Worksheet 

set shtDest =sheets(Sheets("Template").[B1]) 
Sheets("Template").Range("P24:Q30").Copy shtDest.Range("P24") 
+0

nutsch, спасибо за вашу помощь. Выбор вещь определенно лучше. Я пробовал оба ваших решения, и я продолжаю получать ошибки на обоих из них. для рабочего листа Я получаю ошибку времени выполнения 13 "несоответствие типа" с помощью строки Set shtDest. для строки я получаю ошибку времени выполнения 9 - индекс вне диапазона. Извините, что я очень новичок в этом ... – Nadia

+0

Вы получите эту ошибку, если в Листе шаблона ячейка B1 не содержит действительного имени листа. – nutsch

0

Вы можете дать значение переменных из ячейки на листе в VBA со следующим:

Sub example() 
    'Let vba know that you have a variable and it's type is string 
    Dim myVariable as string 

    'Assign the value from cell B5 in Worksheet "Template" to the variable 
    myVariable = Sheets("Template").Range("B5").value 
End sub() 

Вы можете перебрать диапазон ячеек и получить их значения, а также.

Sum example() 
    Dim myVariable as string 

    'Let VBA know that we will store a range in variable "MyCell" 
    Dim myCell as Range 

    'loop through every cell in a range 
    For each myCell in Sheets("Template").Range("B5:B100") 

     'copy data from the template to the worksheet stored in the cell we are on 
     Sheets(myCell.Value).Range("P24:Q30") = Sheets("Template").Range("P24:Q30") 

    Next myCell 
End Example() 
+0

спасибо за помощь. Я получаю ошибку времени выполнения 9 в строке myVariable. мысли? также, какова цель петли через клетки? – Nadia

+0

Для кода @ JNevill вы получите эту ошибку, если в Листе шаблона ячейка B5 не содержит допустимого имени листа – nutsch