プロが教えるわが家の防犯対策術!

いつもお世話になっております。

早速ですが、EoMonthを使って今月末日を取得したいのですが
実行するとコンパイルエラーになります。

エラーメッセージは
 SubまたはFunctionが定義されていません。
です。

タイトルにも記述したようにアドインの
「分析ツール」にチェックを入れても同様の
エラーが出ます。

何かほかに設定しなくてはいけないのでしょうか?
また現在は以下の方法で取得しようとしていますが、他に
取得方法がございましたら教えてください。

Dim iLastDay As Integer
iLastDay = Day(EoMonth(textBox1.Text, 0))

Excel2007を使用しています。

よろしくお願いします。

A 回答 (3件)

既に回答は出てますが。

。。

一行で書くと
'------------------------------------------
iLastDay = Day(DateSerial(Year(TextBox1.Text), Month(TextBox1.Text) + 1, 0))
'-------------------------------------------

TextBox1の値は単なる文字列であるにも拘わらず上記コードが上手くいくのは
それをVBA側で日付として処理してくれるからです。
当方なら確実を期すためにVBA任せにせずこちら側でそれらを処理させます。


'-------------------------------------------
 Dim myDate As Date
 Dim myLastDate As Date
 Dim iLastDay As Integer

 myDate = DateValue(TextBox1.Text)
 myLastDate = DateSerial(Year(myDate), Month(myDate) + 1, 0)
 iLastDay = Day(myLastDate)

 MsgBox myDate & vbLf & myLastDate & vbLf & iLastDay
'----------------------------------------------

実際にはエラー処理が必要であることは言うまでもありません。
 

 
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

上記の方法で取得することができました。

ありがとうございました。
またよろしくお願いします。

お礼日時:2009/05/05 13:12

ほんとに少し勉強して使っているのかな。


(1)エクセルのワークシートの関数とVBAでそれを使うのとは別。
VBAでは使えない関数もある。
関数の解説本によると、VBAで使えるかどうか、注記した本も見たことが有る。WEBでも全一覧はないかも。
(2)つかえる場合でも Application.WorksheetFunction.を関数名の前につける。
ーー
Sub test01()
MsgBox Date
MsgBox DateSerial(Year(Date), Month(Date) + 1, 0)
MsgBox Application.WorksheetFunction.eomonth(Date, 0)
End Sub
でやると、最後の行でエラーになる。EoMonthは使えない部類では。
今月末などでは、上記第2行目の方法が定石的に使われると思う。
ーーー
GOOGLEで「VBA eomonth」で照会すると、記事が出るじゃない。見てから質問してますか。
第1記事で
http://oshiete1.goo.ne.jp/qa3164570.html?ans_cou …
など
「EOMONTHはVBAでは使えないので別な方法でやります」と出ています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

おっしゃる通り勉強不足でした。
とても参考になりました。
またよろしくお願いします。

お礼日時:2009/05/05 13:09

EXCEL VBA


http://questionbox.jp.msn.com/qa3164570.html

こちらかな?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

参考にさせていただきました。

またよろしくお願いします。

お礼日時:2009/05/05 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!