2016-01-29 2 views
0

У меня есть макрос, который вставляет 2 столбца на мой текущий лист и вставляет информацию с другого листа.Переменная для столбцов Excel. Столбец, присвоенный переменной

Я хочу создать две переменные, назначенные каждому столбцу, которые будут меняться при следующем запуске макроса для вставки информации в следующие два столбца.

Columns("BO:BO").Select 

Selection.Insert Shift:=xlToRight 

Range("BO2").Select 
ActiveCell.FormulaR1C1 = "Feb weekly-wk 2" 
Range("BO19").Select 
ActiveCell.FormulaR1C1 = _ 
    "=VLOOKUP(Comparison!RC2,'Jan16 wk4'!R3C15:R34C24,9,FALSE)" 
Range("BO19").Select 
Selection.AutoFill Destination:=Range("BO19:BO47"), Type:=xlFillDefault 
Range("BO19:BO47").Select 

Columns("BP:BP").Select 

Selection.Insert Shift:=xlToRight 
Range("BP2").Select 
Selection.Style = "20% - Accent6" 
Range("BP2").Select 
ActiveCell.FormulaR1C1 = "Diff" 
Range("BP19").Select 
ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]" 

Моя идея - установить переменную, которую я бы заменил текущим кодом «BO» и «BP».

Dim X as String, Y as String 

X = "BO" 

y = "BP" 

Когда я запускаю макрос, то он изменит переменную для этого примера «BO» на «BQ» и «BP» в «БР». В следующий раз, когда я запустил макрос, вы измените «BQ» на «BS» и «BR» на «BT».

+1

, то вы должны использовать его следующим образом 'Columns (x &": "& x)' –

+0

Альтернатива предложению @ ScottCraner: 'Range (Столбцы (x), Столбцы (x))'. – BruceWayne

+0

А также, может быть, вы не знаете, но вы также можете обратиться к столбцу по его индексу (столбец A = 1, B = 2 и т. Д.). Я использую эту * тонну * в циклах. Вы можете использовать одну переменную, например 'Dim i as Long', а затем сделать цикл:' для i = от 1 до 10 ... Столбцы (i). Выбрать ... next i' будет проходить через столбцы A-J, и выберите их. Или вы можете использовать как 'Columns (i + 1)', где вы не можете делать 'Columns (« BO »+1)'. – BruceWayne

ответ

0

Если вы на самом деле не пишете BO/BP в диапазон, который вы трансформируете, я бы пошел с двумя ints, хранящимися в скрытом листе. Чтение/запись при каждом запуске макроса.

Это, на мой взгляд, более легкое решение, в других местах - global variables или хранения его в файл.

0

Я просто очистить свой код немного:

Dim ColBO As Integer 
Dim ColBP As Integer 

Dim StrBO As String 
Dim StrBP As String 

StrBO = "BO" 
StrBP = "BP" 

ColBO = ActiveWorkbook.Range(StrBO & 1).Column 'instead of StrBO you could directly write ("BO" & 1) 
ColBP = ActiveWorkbook.Range(StrBP & 1).Column 'Then you wouldnt need these two variables 

Columns(ColBO).Insert Shift:=xlToRight 
'Columns(ColBO).Select ' Trying to avoid selection but not sure if this works here... 
'Selection.Insert Shift:=xlToRight 

Range(1, ColBO).FormulaR1C1 = "Feb weekly-wk 2" 
Range(19, ColBO).FormulaR1C1 = "=VLOOKUP(Comparison!RC2,'Jan16 wk4'!R3C15:R34C24,9,FALSE)" 
Range(19, ColBO).AutoFill Destination:=Range("BO19:BO47"), Type:=xlFillDefault 

Columns(ColBP).Insert Shift:=xlToRight 'Same here as above 
Range(2, ColBP).Style = "20% - Accent6" 
Range(2, ColBP).FormulaR1C1 = "Diff" 
Range(19, ColBP).FormulaR1C1 = "=RC[-2]-RC[-1]" 

На будущее: Если вы можете, старайтесь избегать .select/Выбор/.Activate, если это возможно. Код может в основном работать без таких команд и без активации ячейки. ;)

+0

Спасибо за помощь. Я смогу проверить это в понедельник. Нужно ли мне что-то менять для этой части? Диапазон (19, ColBO). Автозаполнение Направление: = Диапазон («BO19: BO47»), Тип: = xlFillDefault Я хочу, чтобы BO19: BO47 изменился также в соответствии с колонкой – MikeB

0

Если вы хотите использовать числовые переменные вы можете изменить подход и использовать Cells вместо Range:

'You can use the rows below to know the column number 
Range("BO1").Activate 
ActiveCell.Value = ActiveCell.Column 'This way you get the column number into the cell 
ColNum = ActiveCell.Column 'This way you get the column number into the variable 
'So now you know that BO column number is 67 and you can use 
Cells(1, 67) = "OK" 
'Or, using variables: 
RowNum = 1 
ColNum = 67 
Cells(RowNum, ColNum) = "You Got It!" 

Это делает вас в состоянии столбцов цикла просто с помощью for ... next
Если вам нужно от BO до BR вы можете использовать

For ColNum = 67 To 70 
    Cells(1, ColNum) = "OK" 
Next ColNum 

Надеюсь, что это поможет.

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