【VBA】便利コード集

実行中の表示を更新するかしないか (Trueにするのを忘れずに)

Application.ScreenUpdating = False

 

実行中のアラートを無視するかしないか (Trueにするのを忘れずに)
※無視した場合Yesで処理されるので注意

Application.DisplayAlerts = False

 

選択しているセルを更新する。表示形式を変更したあとに便利!

Sub reconfirm()
For Each e In Selection
e.Value = e.Value
Next
End Sub

フォルダ内にある全ファイル名取得

VBSでファイルを取得してMsgを表示する

Dim objFileSys
Dim objFolder
Dim objFile

Set objFileSys = CreateObject("Scripting.FileSystemObject")

'フォルダオブジェクトを取得
Set objFolder = objFileSys.GetFolder("ディレクトリ名")

'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
WScript.Echo objFile.Name
Next

Set objFolder = Nothing
Set objFileSys = Nothing

↓こちらはtxtに出力する

Dim objFileSys
Dim objFolder
Dim objFile
Dim objOutputTextStream

Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objOutputTextStream = objFileSys.OpenTextFile("log.txt", 2, True)

'フォルダオブジェクトを取得
Set objFolder = objFileSys.GetFolder("ディレクトリ名")

'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
'ファイル名を取得し、ログファイルに出力
objOutputTextStream.WriteLine objFile.Name
Next

'TextStream は Close を忘れずに
objOutputTextStream.Close

Set objOutputTextStream = Nothing
Set objFolder = Nothing
Set objFileSys = Nothing

 

フォルダ内のファイル一覧を取得する[VBScript] : バヤシタ

ログファイル作成 & 追記

VBSでログファイルを作成する

Dim objFSO,objLog

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objLog = objFSO.OpenTextFile("
ファイル名",8,True)

objLog.WriteLine("
任意の文字列")

objLog.Close
Set objLog = Nothing
Set objFSO = Nothing

ディレクトリに一致するファイルがなければ作成される
OpenTextFile の2つ目の引数 = 1:読み取り 2:上書き 8:追加

 

OpenTextFile メソッド

VBScriptで処理した結果をログに書き出す - Qiita

【RegExp】文字列比較

VBSで文字列を比較する

Dim objRE

Set objRE = CreateObject("VBScript.RegExp")
objRE.Pattern = "比較したい文字列"

If objRE.Test("比較する文字列") Then
一致したときの動作
Else
一致しないときの動作
End If

Set objRE = Nothing

正規表現

文字列の先頭を指定 = ^
文字列の後尾を指定 = $
不特定多数の不明文字列 = .*
不明文字 = .

 

VBScript(VBスクリプト)でLikeするには? - 燈明日記

アクティブプリンター名を表示させる

VBAでアクティブのプリンター名(とポート名)を取得する。

Sub ShowCurrentPrinterName()
MsgBox "現在使用しているプリンターは、" & _
Application.ActivePrinter _
& " です。", Title:="現在使用しているプリンターの表示"
End Sub

【メール自動作成&送信】CDO.Messageによるメール送信

VBScriptでメールを送信する。

Set objMail = CreateObject("CDO.Message")

objMail.From = "username@gmail.com"
objMail.To = "username@gmail.com"
objMail.Subject = "SMTP認証、SSL通信によるメール送信テスト"
objMail.TextBody = "CDO.Messageを利用したSMTP認証、SSL通信によるメール送信テスト"

strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
With objMail.Configuration.Fields
   .Item(strConfigurationField & "sendusing") = 2
   .Item(strConfigurationField & "smtpserver") = "smtp.googlemail.com"
   .Item(strConfigurationField & "smtpserverport") = 465
   .Item(strConfigurationField & "smtpusessl") = True
   .Item(strConfigurationField & "smtpauthenticate") = 1
   .Item(strConfigurationField & "sendusername") = "username@gmail.com"
   .Item(strConfigurationField & "sendpassword") = "password"
   .Item(strConfigurationField & "smtpconnectiontimeout") = 60
   .Update
end With

objMail.Send

Set objMail = Nothing

[送信方法]  sendusing = 固定で2を入れる。この数字は、ネットワーク上のSMTPを利用するという意味で、SMTPサーバーとSMTPポートの値を参照するようになる。
[SMTPサーバー]  smtpserver = サーバーを指定
[SMTPポート]  smtpserverport = ポートを指定
[SSL通信をする/しない]  smtpusessl  = True/Flase
[SMTP認証]  smtpauthenticate  = 1(Basic認証)/2(NTLM認証) 1でおk?
[送信ユーザー名]  sendusername  = ユーザー名
[送信パスワード]  sendpassword  = パスワード
[タイムアウト]  smtpconnectiontimeout  = 接続がタイムアウトするまでの秒数

その他コード

[CC]  <CDO.Message object>.CC  メールアドレス
[BCC]  <CDO.Message object>.Bcc  メールアドレス
[ファイル添付]  <CDO.Message object>.AddAttachment  ファイルのフルパス
[HTMLメール]  <CDO.Message object>.HTMLBody  HTML文章
[charset]  <CDO.Message object>.BodyPart.Charset iso-2022-jp,shift-jis,utf-8 など

アドレスを複数設定する = "(アドレス1);(アドレス2)"と記述
アドレスに表示名を付けたい = "(表示名) <(アドレス)>"

 

*関連*

ログファイル作成 & 追記 - goldrehのブログ

 

http://serialty.blog117.fc2.com/blog-entry-10.html