如何通过VBA中的variables数据进行select

我试图继续这个过程,直到单元格结束,但是select需要按照设定的顺序改变。 代码如下:

' C_P Macro ' copies from worksheet & pastes in new sheet ' Keyboard Shortcut: Ctrl+Shift+L Dim rng1 As Range Dim Look As String Dim iRow As Integer With Windows("Audubon-Crest-Rent-Roll-201502-1.xlsx").Activate Set rng1 = Range("A:A") ActiveCell = Range("A228") Do Windows("Audubon-Crest-Rent-Roll-201502-1.xlsx").Activate Range("A228:A239").Select Selection.Copy Windows("Audubon Crest Rent Roll 20150219-altered.xlsm").Activate Range("B17").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("Audubon-Crest-Rent-Roll-201502-1.xlsx").Activate Application.CutCopyMode = False Range("A228:A239").Offset(13, 0).Select Selection.Copy Windows("Audubon Crest Rent Roll 20150219-altered.xlsm").Activate Range("B17").Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("B18").Select Loop Until IsEmpty(Cells(iRow, 1)) End With End Sub 

正如你所看到的,它基本上做的是select11行,然后转置将数据复制到下一行的下一个工作簿中。 我通过这个过程F8,我可以告诉它,它适用于一个select,然后向下移动13行,并做下一个select,但我不知道如何使它不断移动的数据。 我需要它总是select11行,做的程序,然后计数十三行,再次做,直到它击中一个空的行。 理想情况下,我可以将它设置为查找某个单元格条目,并且一旦find这个单元格条目的下一个实例,就select11行,但是我认为13行仍然是一个模式,所以如果它倒数13行应该是罚款。

所以,我认为我的困惑是如何使行selectvariables。 当我查看代码时,我可以看到我的行select是具体的值,所以如果我运行macros,它不会下移,它只会做我已经指出的单元格。 我怎样才能让它通过细胞向下移动?

您不需要激活工作簿来执行范围内的任何操作,而是可以通过限定范围在哪个工作簿中,从而在非活动工作簿中执行一些操作。 这同样适用于工作表和范围。 诚然,这不是什么在你发布的代码示例导致的问题,因为你真的没有触及,但它使你的代码更难以阅读。

你的问题的一个可能的解决scheme是看起来像这样的一个macros:

 Sub Copy_Paste Dim sourceBook As Workbook, destBook As Workbook, sourceRange As Range, destRange As Range Set sourceBook = Workbooks("Audubon-Crest-Rent-Roll-201502-1.xlsx") Set destBook = Workbooks("Audubon Crest Rent Roll 20150219-altered.xlsm") Set sourceRange = sourceBook.Worksheets(<name of sheet the data is in as string>).Range("A228:A239") Set destRange = destBook.Worksheets(<name of sheet the data shall be copied to as string>).Range("B17") Do sourceRange.Copy destRange.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False Set destRange = destRange.Offset(1, 0) Set sourceRange = sourceRange.Offset(13, 0) Loop Until IsEmpty(sourceRange) End Sub 

正如你所看到的,我定义了应该复制的范围,命名它们,然后使用Set语句告诉Excel它们在哪里。 对于循环的每次迭代,然后再次将目标范围向下移动一行,并通过使用偏移属性使其偏移前一个目标范围的一行。 我对源代码范围做了同样的事情,但是我将它抵消了13行,就像你在代码示例中所做的那样。

我希望这有帮助!