2012-03-03 22 views
0

私はこれらの問題の専門家ではありませんが、私は自動生成され、毎日電子メールで送信されることを望むExcelシートを持っています。これで、Excelの値がDBから更新され、処理されます。デスクトップ上にワークシートがあります。私はWindows Vistaでタスクスケジューラを使うことを考えましたが、それが正しいことなのかどうかはわかりません。Excelワークシートがロードされたときに実行するVBAコード

私はシートを開く必要があります...更新されました...更新されたバージョンが電子メールでxxxx @ xxxに送信されました これはどのように行うか、またはヒント? 私はネットを降りてきたコードと電子メールを送信で動作は以下のとおりです。

Sub Mail_ActiveSheet() 
'Working in 97-2010 
Dim FileExtStr As String 
Dim FileFormatNum As Long 
Dim Sourcewb As Workbook 
Dim Destwb As Workbook 
Dim TempFilePath As String 
Dim TempFileName As String 
Dim I As Long 

With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

Set Sourcewb = ActiveWorkbook 

'Copy the sheet to a new workbook 
ActiveSheet.Copy 
Set Destwb = ActiveWorkbook 

'Determine the Excel version and file extension/format 
With Destwb 
    If Val(Application.Version) < 12 Then 
     'You use Excel 97-2003 
     FileExtStr = ".xls": FileFormatNum = -4143 
    Else 
     'You use Excel 2007-2010, we exit the sub when your answer is 
     'NO in the security dialog that you only see when you copy 
     'an sheet from a xlsm file with macro's disabled. 
     If Sourcewb.Name = .Name Then 
      With Application 
       .ScreenUpdating = True 
       .EnableEvents = True 
      End With 
      MsgBox "Your answer is NO in the security dialog" 
      Exit Sub 
     Else 
      Select Case Sourcewb.FileFormat 
      Case 51: FileExtStr = ".xlsx": FileFormatNum = 51 
      Case 52: 
       If .HasVBProject Then 
        FileExtStr = ".xlsm": FileFormatNum = 52 
       Else 
        FileExtStr = ".xlsx": FileFormatNum = 51 
       End If 
      Case 56: FileExtStr = ".xls": FileFormatNum = 56 
      Case Else: FileExtStr = ".xlsb": FileFormatNum = 50 
      End Select 
     End If 
    End If 
End With 

' 'Change all cells in the worksheet to values if you want 
' With Destwb.Sheets(1).UsedRange 
'  .Cells.Copy 
'  .Cells.PasteSpecial xlPasteValues 
'  .Cells(1).Select 
' End With 
' Application.CutCopyMode = False 

'Save the new workbook/Mail it/Delete it 
TempFilePath = Environ$("temp") & "\" 
TempFileName = "Part of " & Sourcewb.Name & " " _ 
      & Format(Now, "dd-mmm-yy h-mm-ss") 

With Destwb 
    .SaveAs TempFilePath & TempFileName & FileExtStr, _ 
      FileFormat:=FileFormatNum 
    On Error Resume Next 
    For I = 1 To 3 
     .SendMail "[email protected]", _ 
        "dsds,dsd, dsdsdsds report" 
     If Err.Number = 0 Then Exit For 
    Next I 
    On Error GoTo 0 
    .Close SaveChanges:=False 
End With 

'Delete the file you have send 
Kill TempFilePath & TempFileName & FileExtStr 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 
End Sub 
+0

これはすべて実行可能です。タスクスケジューラ経由でvbsを使用することをお勧めします。 2つのコメント/クエリ(1)データベースからワークブックをいつ更新するのですか?これはこのコード外で行われますか? (2) 'Sendmail'はOutlookの警告を出します。手動のクリックや* clickyes *のようなプログラムをどう扱っていますか? – brettdj

答えて

1
  1. などなどNotePad、「myscript.vbs」のようなものなどのテキストエディタを経由して以下のコードを保存します。 注これはVBA
  2. があなたの電子メールはOutlookの警告をバイパスするOutlook使用clickyesを介して配信されている場合はVBS
  3. をスケジュールするHow to use the Windows Task Schedulerからの命令を使用していない。(あなたはこれを確認した場合、私はコードに更なる自動化を追加します/

を受け取る送信を強制的に strWB = "C:\temp\test.xls"

ここでは、コードappeareの一部を
をデスクトップファイルへのパスを変更してください。つまり、Outlookを使用すると保存された添付ファイルを追加する必要がありますが、SendMailが直接動作するため、ファイルの保存と削除は無関係です。ファイルのバージョンに値が追加されていない可能性があります

Dim objExcel 
    Dim objOutlook 
    Dim objWB 
    Dim objws 
    Dim strWB 
    Dim strWB2 
    'Change file path to be emailed 
    strWB = "C:\temp\test.xls" 
    Set objExcel = CreateObject("Excel.Application") 
    objExcel.DisplayAlerts = False 
    Set objWB = objExcel.Workbooks.Open(strWB) 
    'Change sheet index as needed 
    Set objws = objWB.Sheets(1) 
    objws.Copy 
    With objExcel.ActiveWorkbook 
     .SendMail "[email protected]", "test" 
     .Close False 
    End With 
    objWB.Close False 
    With objExcel 
     .DisplayAlerts = True 
     .Quit 
    End With 
+0

また、「開くときにデータを更新する」設定を有効にすることは、おそらく良い考えです。提案のスクリーンショットhttp://i44.tinypic.com/2hq8j7r.png – Gebb

+0

@Gebb thxを参照してください。元の質問に対する私の質問によると、データベースがExcelに更新された時期や方法がわかりません。私はもっ​​と詳細が必要だと思う – brettdj

関連する問題