カテゴリ:VBA、マクロ( 3 )
(VBA)Excelでシートをコピー・削除
Excelでワークシートを複数コピーして、名前を変更し、セルに値を入れるサンプル(SheetCopyプロシージャ)です。
シート名は、For分のループ変数を使います。

また、SheetDelプロシージャはシートの削除を行ってます。


Public Const sBaseSheet = "Sheet1"
Public Const iMaxSheet = 4
 
Sub SheetCopy()
'ループ変数
Dim i As Integer
i = 0

Dim rng As Range
'コピー元のシートを選択
Worksheets("Sheet1").Select

'削除時の確認メッセージをOFFに
Application.DisplayAlerts = False
'画面高速化
Application.ScreenUpdating = False
For i = iMaxSheet To 1 Step -1
'シートをコピーする
ThisWorkbook.Sheets(sBaseSheet).Copy after:=Sheets(sBaseSheet)
'シートの名前をヘンコする
ThisWorkbook.Sheets(sBaseSheet & " (2)").Name = CStr(i)
'セルに値セット
Set rng = ThisWorkbook.Sheets(CStr(i)).Range("A1")
rng.Value = i
Next i
'削除時の確認メーッセージをOnに
Application.DisplayAlerts = True
'画面高速化
Application.ScreenUpdating = True
 
End Sub
 
Sub SheetDel()
Dim i As Integer
i = 0
Dim rng As Range
'削除時の確認メッセージをOFFに
Application.DisplayAlerts = False
'画面高速化
Application.ScreenUpdating = False
 
For i = iMaxSheet To 1 Step -1
'シート削除
ThisWorkbook.Sheets(CStr(i)).Delete
Next i
'削除時の確認メーッセージをOnに
Application.DisplayAlerts = True
'画面高速化
Application.ScreenUpdating = True
End Sub


参考:
ワークシートの追加 - ワークシートの追加 - Excel VBA入門
Office TANAKA - Excel VBA講座:シートの操作[シートを削除する]
Office TANAKA - Excel VBA Tips[ワークシートの名前を変更する]
[PR]
by Jehoshaphat | 2011-10-27 23:45 | VBA、マクロ | Trackback | Comments(0)
WSHでログアウト・シャットダウン・再起動を行う
VBScriptでシャットダウンや再起動、ログオフを行う方法です。
下記のようなコードでできるようです。
Option Explicit
 
Dim objShut , objOS , objSystem
 
'シャットダウンオブジェクト取得
Set objShut = GetObject("winmgmts:{impersonationLevel = impersonate, (Shutdown)}")
'OSのオブジェクト取得
Set objOS = objShut.InstancesOf("Win32_OperatingSystem")
 
'シャットダウン
For Each objSystem In objOS
objSystem.Win32Shutdown 8
Next
 
'再起動
For Each objSystem In objOS
objSystem.Win32Shutdown 2
Next
 
'ログオフ
For Each objSystem In objOS
objSystem.Win32Shutdown 0
Next


参考:
WSH入門 > 第4回:Windowsでの運用の自動化について [高度情報技術科]
VBScript Tips (Tips0184)
[PR]
by jehoshaphat | 2010-09-12 23:14 | VBA、マクロ | Trackback | Comments(0)
VBAのLine Input で改行コード(LF)が認識されない

あるC#アプリで、CSVファイル出力時に"\n"で改行を付け加えていました。

そのC#アプリで吐いたCSVを読み込む Excel のマクロを実行すと、C# で ¥n で付けてた改行が認識されません。

おかしいと思い、出力した CSV をバイナリエディタでみると改行コードが、0x0A(LF)だけになってました。。

Excel の VBA ではファイルを OPEN した後、下記のコードで1行ずつ読んでいました。
Line Input #intFF, recode

この Line Input はどうやら改行コード LF を解釈してくれず、改行を認識するのに CR(0x0D) が必要らしいです。

なので C# 側で、改行を ¥r¥n とするか、Environment.NewLine プロパティを使う方法が取れるようです。
(Environment.NewLineだとUNIX 以外のプラットフォームでは "¥r¥n" を含む文字列で UNIX プラットフォームでは "¥n" を含む文字を表すらしい)

参考
DOBON.NET:改行、タブ文字などの定数


C#側も直すべきですが、VBA側も何とかしたいと思って調べてみました。
すると、「Line Input # ステートメント」の仕様 - 鳶秋の日記というブログを発見。
なるほど、LF で Split して配列化すればいいようです。

ファイルサイズが大きいと危険と書いてますが、今回はサイズ小さいので大丈夫でしょう。。

参考:
改行コードに注意|VBA (マクロ) 作法/コーディング規約 集約中 ~ メタボなプログラムにサヨナラしよう
[PR]
by jehoshaphat | 2010-04-26 00:37 | VBA、マクロ | Trackback | Comments(0)