2015-07-20 56 views
-1

我有一個問題想複製特定名單,有在VBA一個不錯的功能,具體名單複製到另一個工作表:如何使用VBA

Sheets("Data").ListObjects("mail_list").DataBodyRange.Copy 
Sheets("Email").Range("B2").PasteSpecial xlPasteValues 

而且我想用具體名單取決於是什麼樣的文本電池,就像這樣:

Sub make_email() 
Dim mail_list, subject As String 
Dim i As Integer 
i = 2 
subject = Sheets("Form").Cells(7, 2).Text 
Do While Sheets("Data").Cells(i, 4).Text <> "" 
    If subject = Sheets("Data").Cells(i, "AW") Then 
     mail_list = Cstr(Sheets("Data").Cells(i, "AW")) 
     Exit Do 
    End If 
    i = i + 1 
Loop 
Sheets("Data").ListObjects(mail_list).DataBodyRange.Copy 
Sheets("Email").Range("B2").PasteSpecial xlPasteValues 
End Sub 

我認爲ListObjects需要串採取具體名單,但沒有,程序返回的錯誤超出範圍。如何查看特定名稱的ListObjects(例如.ListObjects(mail_list).DataBodyRange.Copy)並使其正常工作?

+1

我不確定這個問題很重要,但是您需要在「Dim mail_list」聲明中包含「As String」。您當前的代碼將其聲明爲「變體」。看到這個[Chip Pearson頁面](http://www.cpearson.com/excel/declaringvariables.aspx)並向下滾動到「注意用一個聲明聲明的變量」。 –

+0

你想用ListObjects做什麼?您的最終解決方案是基於B7中的文本複製某些行? 另外,正如@DougGlancy提到的那樣,您的Dim語句應該是'Dim mail_List as String,subject as String'。直覺地反駁一下,你現在擁有的是'Dim mail_list',它沒有任何類型,所以默認的Excel將它設置爲我相信的變體。你最好明確說明類型。不幸的是,你不能將變量串在一起,並在最後設置類型。每個變量都應該被賦予一個類型。 – BruceWayne

回答

-1

我想

Dim mail_list, subject As String 
= 
Dim mail_list as string 
Dim subject as string 

...哦...

但無論如何,我改變了我的命名名單表類型列表,該代碼工作。 但我有很多定義列表(我的意思是,在名稱管理器中的這種其他類型 - 抱歉的解釋,但我不知道這個列表類型是如何命名的英文版的Excel ...命名範圍?),我想用這個類型。所以問題是如何將命名範圍複製到另一個工作表中...

+0

我解決了它。 只需使用Range(mail_list).copy;) – Hannibal