2015-02-09 117 views
0

基本上我有一個動態範圍,將永遠是在列A:C在片1我試圖寫個人宏拷貝的動態範圍和調換這到第2頁到允許郵件合併能夠讀取第1行作爲郵件合併字段。VBA移調的動態範圍在Excel

目前出現在此行中的錯誤:

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 

任何幫助將不勝感激。

+0

心靈添加錯誤消息的問題是什麼?如果錯誤號可能會幫助我們幫助你 – 2015-02-09 05:31:59

+0

。是'1004'的原因是你的列A是空可言,也沒有用'0'因此充滿'lastRow'變量結果的小區,你不能創建範圍,行數爲0 – 2015-02-09 06:51:29

+0

結束錯誤確實是1004。我用El Scripto建議的代碼代替,現在錯誤是運行時'424' - 對象需要的錯誤。 這個錯誤發生在第一場合: Sheet2.Activate – 2015-02-11 01:18:58

回答

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的建議,非常感謝。

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,然後按下CTRL + C,它應該將錯誤詳細信息以純文本複製到剪貼板,以便您可以將其粘貼到此處。

+0

你的想法是錯誤的。原始的和你對'Set sourceRange ='的建議不能互換使用,都可以指完全不同的範圍。 – 2015-02-09 07:29:45

+0

你說得對。 「我的錯」。 我更新了我的答案,以便更好地匹配他的代碼。 – 2015-02-09 08:09:32

+0

仍然沒有正確的,但要好得多......你應該使用類似'...細胞(rows.count, 「A」)。結束(xlup)...' – 2015-02-09 08:46:16