Board logo

標題: [發問] 檔案中的兩個Sheet 複製到新的檔案問題 [打印本頁]

作者: jackyliu    時間: 2013-8-26 21:22     標題: 檔案中的兩個Sheet 複製到新的檔案問題

目的:A檔案(test01.xls)的樞紐整理完畢後,將A檔案的其中幾個Sheets(TEST、RAW;TEMP不要COPY)內容複製到B檔案儲存,並依儲存日期時間命名.

目前VBA內容已有 1.檔案命名, 2.A檔案的Sheets複製會新增一個Execl檔案,後續動作,一直試不出來,無言,麻煩版大幫忙了
作者: owen06    時間: 2013-8-26 23:17

hello,你是不是忘了上傳檔案了呢?
作者: jackyliu    時間: 2013-8-27 21:13

目的:A檔案(test01.xls)的樞紐整理完畢後,將A檔案的其中幾個Sheets(TEST、RAW;TEMP不要COPY)內容複製到B檔案 ...
jackyliu 發表於 2013-8-26 21:22


補上檔案...
作者: Hsieh    時間: 2013-8-28 08:42

本帖最後由 Hsieh 於 2013-8-28 08:46 編輯

回復 1# jackyliu
  1. Sub Copy_Sheet()
  2. Sheets(Array("TEST", "RAW")).Copy
  3. fs="D:\" & Format(Date, "yyyy_mm_dd") & ".xls"  '存檔檔名
  4. ActiveWorkbook.SaveAs FileName:= fs,FileFormat:=-4143
  5. End Sub
複製代碼

作者: jackyliu    時間: 2013-8-28 13:43

回復 4# Hsieh
我將code 轉修改到其他檔案 , 有些檔案有五個sheet 要轉存到新的檔案,
且sheet 不連續; 我用您的方式,將其他 sheet名稱加入到 Sheets(Array("TEST", "RAW", "TODAY","YESDAY","NOW")).Copy , 這樣會出現錯誤耶 !
作者: GBKEE    時間: 2013-8-28 14:35

回復 5# jackyliu
檢查一下工作表的名稱 "TEST", "RAW", "TODAY","YESDAY","NOW"是否有誤!
有"TEST "," TEST" 這情況嗎?
作者: jackyliu    時間: 2013-8-28 14:47

回復 6# GBKEE

檢查一下工作表的名稱 "TEST", "RAW", "TODAY","YESDAY","NOW"是否有誤!
有"TEST "," TEST" 這情況嗎?
回覆GBKEE: 檢查一下,應該沒錯,  Sheets(Array("TEST", "RAW", "TODAY","YESDAY","NOW")).Copy ,好像只能複製兩個sheet,
三個以上就不行了 !


順道一提,依日期時間產生的檔案,要如何mail出去,
我之前都是一直指定同一個檔案,但目前做法是要將
剛才產生的mail出去,可否指導一下 !

CDO_Mail_Object.AddAttachment "D:\TEMP\test.xls"
作者: GBKEE    時間: 2013-8-28 15:07

回復 7# jackyliu
2003 沒這限制

參考[彰化一整天的blog]的檔案  

[attach]15867[/attach]
作者: c_c_lai    時間: 2013-8-28 15:30

回復  GBKEE

檢查一下工作表的名稱 "TEST", "RAW", "TODAY","YESDAY","NOW"是否有誤!
有"TEST "," TES ...
jackyliu 發表於 2013-8-28 14:47
  1. Sub Copy_Sheet()
  2.     Sheets(Array("TEST", "RAW", "TODAY", "YESDAY", "NOW")).Copy   '  同時複製 "TEST"、以及 "RAW" 等五個工作表單
  3.     fs = ThisWorkbook.Path & "\" & Format(Date, "yyyy_mm_dd") & ".xls"      '  存檔檔名
  4.     ActiveWorkbook.SaveAs FileName:=fs, FileFormat:=-4143
  5. End Sub
複製代碼
這語法是正確的,GBKEE版大用的是 2003,而我是使用 2010,
請檢查妳的程式碼。
作者: jackyliu    時間: 2013-8-28 15:30

回復 8# GBKEE
回覆GBKEE: 重新在檢查測試其他檔案,都不行複製三個以上的sheet!  Sheets(Array("TEST", "RAW", "TODAY","YESDAY","NOW")).Copy ,
作者: c_c_lai    時間: 2013-8-28 15:44

回復  GBKEE
回覆GBKEE: 重新在檢查測試其他檔案,都不行複製三個以上的sheet!  Sheets(Array("TEST", "RA ...
jackyliu 發表於 2013-8-28 15:30

附上檔案,請參考:
[attach]15869[/attach]
作者: jackyliu    時間: 2013-8-28 18:25

回復 11# c_c_lai
感謝c_c_lai ,大力幫忙 ! 複製新檔案完成,沒問題了
若將依日期時間產生的檔案,要mail出去,
我之前都是一直指定同一個檔案,但目前做法是要將
剛才產生的mail出去,可否指導一下 !

我之前附件寫法如下: 不知道要如何 將剛產生的的檔案,要mail出去(日期時間命名檔案)
CDO_Mail_Object.AddAttachment "D:\TEMP\test.xls"
作者: c_c_lai    時間: 2013-8-28 19:16

回復 12# jackyliu
有關 Send Mail Using CDO,我從國外網站摘錄了一篇,請參考:
  1. ' Send Mail Using CDO
  2. Public Sub testCDO()
  3. '  Purpose   Demondtrate Sending an Email with an attachment using CDO (Collaboration Data Objects)
  4. '           Uses Late Binding - Does not need a reference to the Microsoft CDO For Windows library
  5. '           cdosys comes innstalled as standard on Windows 2K and higher workstations and servers
  6. '           This code will fail on NT4, Win 98, and Win 95 where the cdosys.dll is not present
  7. '  Author    Ron Weiner    [email protected]
  8. '           Copyrite © 2004-2005 WorksRite Software Solutions
  9. '           You may use this code example for any purpose what-so-ever with
  10. '           acknowledgement. However, you may not publish the code without
  11. '           the express, written permission of the author.
  12.     Const cdoSendUsingPort = 2
  13.     Const cdoBasic = 1
  14.     Dim objCDOConfig As Object, objCDOMessage As Object
  15.     Dim strSch As String

  16.     strSch = "http://schemas.microsoft.com/cdo/configuration/"
  17.     Set objCDOConfig = CreateObject("CDO.Configuration")
  18.     With objCDOConfig.Fields
  19.         .Item(strSch & "sendusing") = cdoSendUsingPort
  20.         .Item(strSch & "smtpserver") = "SMTP.ServerName.Com"
  21.         ' Only used if SMTP server requires Authentication
  22.         .Item(strSch & "smtpauthenticate") = cdoBasic
  23.         .Item(strSch & "sendusername") = "[email protected]"
  24.         .Item(strSch & "sendpassword") = "YourPassword"
  25.         .Update
  26.     End With

  27.     Set objCDOMessage = CreateObject("CDO.Message")
  28.     With objCDOMessage
  29.         Set .Configuration = objCDOConfig
  30.         .from = "Senders Pretty Name"
  31.         .sender = "[email protected]"
  32.         .To = "[email protected]"
  33.         .Subject = "Sample CDO Message"
  34.         ' Use TextBody to send Email in Plain Text Format
  35.         '.TextBody = "This is a test for CDO message"
  36.         ' Use HTMLBody to send Email in Rich Text (HTML) Format
  37.         .HTMLBody = "Test CDO Rich Text this is not Bold But <B>This is!</B>"
  38.         ' Adding Attachments is easy enough
  39.         .AddAttachment "c:\SomeFile.zip"
  40.         .AddAttachment "c:\SomeOtherFile.pdf"
  41.         ' Un-Rem next line to get "Return Reciept Request"
  42.         '.MDNRequested = True
  43.         .Send
  44.     End With
  45.     Set objCDOMessage = Nothing
  46.     Set objCDOConfig = Nothing
  47. End Sub
複製代碼

作者: jackyliu    時間: 2013-8-28 21:29

回復 13# c_c_lai

我在想fs得到新檔案名稱和路徑 , 將此訊息給 Sub sendmail()副程式, Sub sendmail()副程式就可以附加檔案方式,mail出去了....
Sub main()
fs = ThisWorkbook.Path & "\" & Format(Now, "yyyy_mm_dd hhmm") & ".xls"  '存檔檔名
End Sub

Sub sendmail()副程式,這裡一直是不出來,要如何附加新建立的檔案(檔名為yyyy_mm_dd hhmm.xls)
CDO_Mail_Object.AddAttachment "D:\TEMP\test.xls" 這是我之前指定同一個檔案的方式,不知道要怎麼改
End Sub

以上, 請板大協助 !
作者: c_c_lai    時間: 2013-8-28 21:42

回復 14# jackyliu
這是妳所要的嗎?
  1. Sub Ex()
  2.     Dim fs As String
  3.    
  4.     fs = ThisWorkbook.Path & "\" & Format(Now, "yyyy_mm_dd hhmm") & ".xls"  
  5.     sendmail(fs)
  6. End Sub

  7. Sub sendmail(fs As String)
  8.    CDO_Mail_Object.AddAttachment fs
  9.     CDO_Mail_Object.Send
  10. End Sub
複製代碼

作者: c_c_lai    時間: 2013-8-29 08:10

回復 14# jackyliu
因為無法得到 SMTP Server 的位址,我把執行結果列示如下。
之前妳是如何傳送出去?能否把原稿上傳提供實務應用。
[attach]15871[/attach]
[attach]15872[/attach]
作者: c_c_lai    時間: 2013-8-29 08:38

回復 14# jackyliu
再修正後連結產生的訊息:(已經加入cdoSendUsingPort 等參數)
關鍵性應是無法正確連結 SMTP Server。
[attach]15874[/attach]
  1. Sub sendEMail(fd As String)
  2.     Const cdoSendUsingPort = 2
  3.     Const cdoBasic = 1
  4.     Dim objEmail As Object, CDO_Config As Object
  5.     Dim SMTP_Config As Variant
  6.     Dim strSch As String

  7.     strSch = "http://schemas.microsoft.com/cdo/configuration/"
  8.     Set objEmail = CreateObject("CDO.Message")       '  建立 CDO 物件
  9.    
  10.     On Error GoTo debugErr
  11.     Set CDO_Config = CreateObject("CDO.Configuration")
  12.     With CDO_Config.Fields
  13.         .Item(strSch & "sendusing") = cdoSendUsingPort
  14.         .Item(strSch & "smtpserver") = "SMTP.ServerName.Com"
  15.         ' Only used if SMTP server requires Authentication
  16.         .Item(strSch & "smtpauthenticate") = cdoBasic
  17.         .Item(strSch & "sendusername") = "[email protected]"
  18.         .Item(strSch & "sendpassword") = ""
  19.         .Update
  20.     End With

  21.     With objEmail
  22.         Set .Configuration = CDO_Config

  23.         .From = "[email protected]"               '  寄件者(網域必須存在)
  24.         .To = "[email protected]"                 '  收件者
  25.         .Subject = "CDO郵件測試"                    '  郵件主旨
  26.         .TextBody = "郵件測試本文"                 '  郵件內文
  27.    
  28.         .AddAttachment fd
  29.         .Send
  30.     End With
  31.    
  32. debugErr:
  33.     If Err.Description <> "" Then MsgBox Err.Description
  34.     Set objEmail = Nothing
  35.     Set CDO_Config = Nothing
  36. End Sub
複製代碼

作者: jackyliu    時間: 2013-8-29 11:23

回復 17# c_c_lai

我遇到新複製sheet的檔案超過25mb, mail發不出去...
還在想有其他方式嗎?

另外分享我的code
Sub sendmail(fs As String)
Dim CDO_Mail_Object As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim Email_Subject, Email_Send_From, Email_Send_To, Email_Cc, Email_Bcc, Email_Body As String
Email_Subject = "Today IB Bank List! (Attachment)"
Email_Send_From = "[email protected]"
Email_Send_To = "[email protected]"
Email_Cc = "[email protected]"
Email_Bcc = "[email protected]"
Email_Body = "test "
Set CDO_Mail_Object = CreateObject("CDO.Message")
On Error GoTo debugs
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields
With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'please put your server name below
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxxx.xxx.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
With CDO_Mail_Object
Set .Configuration = CDO_Config
End With
CDO_Mail_Object.Subject = Email_Subject
CDO_Mail_Object.From = Email_Send_From
CDO_Mail_Object.To = Email_Send_To
CDO_Mail_Object.TextBody = Email_Body
CDO_Mail_Object.CC = Email_Cc 'Use if needed
CDO_Mail_Object.BCC = Email_Bcc 'Use if needed
CDO_Mail_Object.AddAttachment "D:\test.xls"


CDO_Mail_Object.Send
debugs:
If Err.Description <> "" Then MsgBox Err.Description
'Sheet1.Select
ThisWorkbook.Save
Application.DisplayAlerts = True
ThisWorkbook.Close
End Sub
作者: c_c_lai    時間: 2013-8-29 11:47

回復 18# jackyliu
妳的 SMTP Server 的 IP Address 是設定多少?
作者: jackyliu    時間: 2013-8-29 13:03

回復 19# c_c_lai

.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'please put your server name below
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxxx.xxx.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
作者: jackyliu    時間: 2013-8-29 14:50

回復 4# Hsieh

有辦法將execl 的四個sheet 複製另存成圖檔嗎?
有解嗎?

作者: jackyliu    時間: 2013-8-29 21:22

回復 6# GBKEE


    有辦法將execl 的四個sheet 複製另存成圖檔嗎?
Mail自動化有解嗎?

最終結果如圖片所示: 將execl檔案裡的四個sheet 複製另存成圖檔,並mail 出去...
附件就是outlook 寄出畫面,希望大家能夠幫忙和分享,感謝!
作者: Hsieh    時間: 2013-8-29 23:33

回復 21# jackyliu
工作表要存成圖檔?
這要看資料範圍大小而定,若無法完整顯示資料區域那將無法取得完整畫面
作者: jackyliu    時間: 2013-8-30 10:33

回復 23# Hsieh

主要是將execl檔案裡的四個sheet 內容, 用Outlook  mail方式寄出(自動化)
目前是人工手動開啟execl檔案 , 將四個sheet 內容 用 cut圖軟體, 複製貼到 Outlook  mail方式寄出,
希望 能有辦法,用vba處理.

這要看資料範圍大小而定,若無法完整顯示資料區域那將無法取得完整畫面
回覆:  1. sheet+範圍 複製貼到 Outlook  mail方式寄出
          2. 直接將四個sheet , 複製貼到 Outlook  mail方式寄出
以上兩種作法,哪個做的出來?
作者: stillfish00    時間: 2013-8-30 11:29

回復 21# jackyliu
  1. Sub RangeToPicture()
  2.   Dim rngSrc As Range
  3.    
  4.   With ActiveSheet
  5.     Set rngSrc = .UsedRange
  6.    
  7.     rngSrc.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
  8.     With .ChartObjects.Add(Left:=rngSrc.Left, Top:=rngSrc.Top, Width:=rngSrc.Width, Height:=rngSrc.Height)
  9.       .Chart.Paste
  10.       .Chart.Export "C:\pic1.jpg"
  11.       .Delete
  12.     End With
  13.   End With
  14. End Sub
複製代碼

作者: jackyliu    時間: 2013-8-30 22:51

本帖最後由 jackyliu 於 2013-8-30 23:02 編輯

回復 25# stillfish00

原本測試檔案, Run起來沒問題; 後來我將code 轉到其他檔案上(四個sheet裡,共有六個樞紐資料,總共有28MB),
程式跑起來,就出問題,附上相關圖片...
[attach]15906[/attach][attach]15907[/attach][attach]15908[/attach]

大大: 有其他的方法嗎?能讓我mail出去嗎? 目前我都人工方式,將樞紐資料圈選後,
在到Outlook 操作 選擇性貼上..點陣圖 ,再mail 出去 ~ 能夠自動化嗎?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)