VBA在excel中转​​置动态范围

时间:2015-02-09 05:29:17

标签: excel vba excel-vba

基本上我的动态范围始终位于第1页的A:C栏中。我试图编写一个复制动态范围的个人宏并将其转换到工作表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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

所以我今天花了一点时间研究,最后让它发挥作用。脚本发布在下面:

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的建议,非常感谢。

答案 1 :(得分:0)

在您的代码中,执行:

 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,它应该将纯文本中的错误详细信息复制到剪贴板,这样就可以将其粘贴到此处。