|
賞与支給VBAを作成しています。
賞与の源泉徴収には前月分の課税対象所得額を取り込む必要があり、以下のVBAをマクロ記録で記録したものに加工して作成したのですが、以下についてご教示ください。
使用Book:賞与処理.xls - Sheet("賞与メニュー")、Sheet("前月分")
格納庫.xls - Sheet("平成22年")
'Sheet("平成22年")には1年間(1〜12月まで)の全社員の給与データが格納されています。
mykey:Sheet("賞与メニュー").Range("P14") →Sheet("平成22年")の支給日データ(日付型)を支給日が重複しないコンボリストに作成してP14で選択させています。
1.AutoFilterのCriterialが支給月のたびに(賞与支給月の前月分)変わるので、変数mykeyで取り込もうとしましたが、うまくいきません。VBAに直接"H22.03.26"と記述して実行するとうまくできるのですが、mykeyにするとうまくいきません。mykey自体が空なのか、日付型として認識せずにAutoFilterできないのか?、解決策をご教示ください。
2.Application.DisPlayAlerts=Falseを記述しないと「クリップボードに大きな情報があります。・・・」と表示され、「はい」を選択しないと先に進みません。Application.DisPlayAlerts=Falseと記述しておけばよいのですが、クリップボードを経由しないですむ記述をご教示ください。
3.ActiveWindow.WindowState=xLMaximized
Application.Windowstate=xLMaximized と記述しないと、画面が最小のままで、そのwindowに左右並列表示の片割れ状態で表示されたままになってしまうため、この記述をしています。このまま記述しておいてもよいのですが、解決策はありませんか?
以上3点について、以下のVBAから解決策をご教示ください。
なお手書きのため大文字、小文字が混在、また単純なスペルミスがあろうかと思いますがご容赦ください。(VBAに直接"H22.03.26"と入力するとうまく実行されます)
Sub 前月分データ取得()
Worksheets("賞与メニュー").select
Dim mykey As Variant 'mykeyは日付データです
mykey = Range("p14").Value
Application.ScreenUpdating=False
Worksheets("前月分").Cells.Clearcontents ’データ抽出前に前回分をクリア
Range("A1").Select
Const cnsFind_SYOUYOFILE As String="C:\Windows\デスクトップ\給料\格納庫.xls"
Const cnsFind_Sheet As String="平成22年"
Workbooks.Open(cnsFind_SYOUYOFAILE)
Worksheets.("平成22年").Select
Selection.Autofilter Field:=1,Criterial:=mykey
'mykey部分に"H22.3.26"と直入力だとうまくいく
Rows("2:200").Select '抽出後、抽出データをsheet"前月分"に行複写するため
Selection.Copy
Range("a2").Select '黒く反転部分する部分を解除するため
Application.WindowState=xlNormal
Windows.Arrange ArrangeStyle:=xlvertical
'sheet"平成22年"が表示されているので、Sheet"前月分"を前面に表示させるため
Windows("賞与処理.xls").Activate
Worksheets("前月分").Activate
Range("a1").Select '抽出データのコピー先セル
Application.DisPlayAlerts=False
Selection.PasteSpecial Paste:=xlValue, Operation:=xlNone,SkipBlanks:=False,Transpose:=False
Workbook("格納庫.xls").Close False
Range("A:B,E:BZ,CB:CL").Select
Selection.Delete Shift:=xlToLeft
Range("a1").Select
'90列中、必要なのはC列社員ID,D列氏名、CA列課税対象所得額の3列のみのためその他は列削除する
ActiveWindow.WindowState=xLMaximized
Application.Windowstate=xLMaximized
'賞与処理.xls - Sheet("前月分")を画面に全体表示するため
Application.ScreenUpDating=True
End Sub
|
|