VBA在Excel中转​​换dynamic范围

基本上,我有一个dynamic范围,将永远在列A:C在表1中。我试图写一个个人的macros,复制dynamic范围,并将其转换到工作表2上,以允许邮件合并能够读取行1作为邮件合并领域。

目前错误出现在这一行:

Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(lastRow, 1)) 

整个代码如下所示。 有可能是我错过了一个简单的错误,或者甚至是一个更简单的方法来实现我想要的结果,但是这是我目前所提出的。

 Sub TrasposeData() ' ' TrasposeData Macro ' Takes the data from sheet one and transpose it to sheet 2 to allow for mail merge compatibility. Sheet1.Activate Dim sourceRange As Range Dim targetRange As Range Dim lastRow As Long lastRow = WorksheetFunction.CountA(Range("A:A")) Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(lastRow, 1)) Sheet2.Activate Set targetRange = ActiveSheet.Cells(1, 1) Sheet1.Activate sourceRange.Copy Sheet2.Activate targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' Keyboard Shortcut: Ctrl+t ' Application.Run "PERSONAL.XLSB!TrasposeData" ActiveWindow.Close End Sub 

任何帮助将非常感激。

所以我花了一点时间研究今天,终于搞定了。 该脚本张贴如下:

 Sub TransposeData() ' ' TransposeData Macro ' Traspose the data on sheet1 to sheet2 to allow for mail merge ' Sheets("Sheet1").Select Dim sourceRange As Range Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row Set sourceRange = ActiveSheet.Range("A1:C" & lastRow) sourceRange.Copy Sheets("Sheet2").Select Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' Keyboard Shortcut: Ctrl+Shift+T ' End Sub 

感谢El Scripto和KazJaw的build议,非常感谢。

在你的代码中,执行:

  lastRow = WorksheetFunction.CountA(Range("A:A")) Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(lastRow, 1)) 

统计没有空单元的数量,但它可能不会给你最后一个单元格(逻辑错误)。 就像上面写的KazJaw一样,这可能也是可能出错的原因。

更好的方法是使用(取代上述两行):

  Set SourceRange = ActiveSheet.Range(Cells(1, 1), _ Cells(ActiveSheet.UsedRange.Rows.Count, 1)) 

尝试一下,如果失败,请发布错误信息。

复制错误的简单方法是单击错误消息框,然后按CTRL + C,它应该将错误详细信息以纯文本格式复制到剪贴板,以便将其粘贴到此处。