我有一个宏,在我当前的工作表上插入2列并粘贴另一张工作表中的信息。
我想创建分配给每个列的2个变量,这些变量将在下次运行宏时将更改,以便将信息粘贴到接下来的两列中。
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”更改为“BR”。下次运行宏时,会将“BQ”更改为“BS”,将“BR”更改为“BT”。
答案 0 :(得分:0)
如果您实际上没有将BO / BP写入您正在转换的范围,我将使用两个整数,存储在隐藏的工作表中。每次运行宏时都可以读/写。
在我看来,这是一个更简单的解决方案,其他地方可能是global variables或将其存储到文件中。
答案 1 :(得分: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]"
对于未来:如果可以,请尽量避免。选择/选择/。如果可能,请激活。代码几乎可以在没有这些命令的情况下运行,也无需激活单元。 ;)
答案 2 :(得分: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
希望它有所帮助。