2017-02-09 19 views
1

我有一个按钮,复制列ñ&我并粘贴在N + 3 &我+ 3,但列ñ&我需要改变,以N + 3 &我+ 3之后。我试图通过在代码的末尾添加n = n + 3 i = i + 3来做到这一点,但它不起作用。变化而变化的数字永久VBA

Sub Macro1() 

Dim n As Integer 
Dim i As Integer 

n = 22 
i = 24 
Range(Columns(n), Columns(i)).Copy 
Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

Columns(n + 3).ClearContents 


n = n + 3 
i = i + 3 

End Sub 
+3

小组退出时会丢失范围。您需要将它们放入模块级别的变量中,或者使用其他类型的持久性(如隐藏工作表)。 – Comintern

+0

请参阅Docs.SO上的[变量和范围](http://stackoverflow.com/documentation/vba/877/declaring-variables/2957/variables#t=201702091912202961978)。 –

+0

谢谢,通过将数字22和24放置在另一个工作表上并将它们添加到+3来实现它。 – Serveira

回答

2

另一种选择是声明变量Static

Sub Macro1() 
    Static n As Integer 
    Static i As Integer 

    If n = 0 Then n = 22 
    If i = 0 Then i = 24 

    Range(Columns(n), Columns(i)).Copy 
    Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

    n = n + 3 
    i = i + 3 
End Sub 

请注意,如果你这样做,你需要添加“初始化代码“,这是宏运行的第一次。

1

将变量分配给单元格。例如,您将n的值设置为单元格A1,将i的值设置为单元格B1。

Sub Macro1() 

Dim n As Integer 
Dim i As Integer 

n = Worksheets("Sheet1").Range("A1").Value 
i = Worksheets("Sheet1").Range("B1").Value 
Range(Columns(n), Columns(i)).Copy 
Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

Columns(n + 3).ClearContents 


n = n + 3 
i = i + 3 

Worksheets("Sheet1").Range("A1").Value = n 
Worksheets("Sheet1").Range("B1").Value = i 

End Sub 
1

你可以试试这个

Sub Macro1() 
    Dim n As Integer 
    Dim i As Integer 

    With ActiveSheet.UsedRange 
     n = WorksheetFunction.Min(.Columns(.Columns.Count).Column - 2, 22) 
    End With 
    i = n + 2 
    Range(Columns(n), Columns(i)).Copy 
    Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

    Columns(n + 3).ClearContents 
End Sub