こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

型が一致しません・・・VBA

困っています、、
このコードを実行するとなぜか
「型が一致しません」と言われてしまいます

しかしF8を使い順番にやっていくとそのまま実行されます


Option Explicit


Dim wsDetail As Worksheet
Dim wsData As Worksheet
Dim wsMES As Worksheet

Public Sub meisai()

Call 基本
Call 職務
Call 時間外
Call 補助
Call その他
Call 通勤

End Sub

Private Sub 基本()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsDetail.Range("D10") = wsData.Range("C5").Value

End Sub

Private Sub 職務()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsDetail.Range("H10") = wsData.Range("C8").Value * Range("C5").Value

End Sub

Private Sub 時間外()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsDetail.Range("L10") = wsData.Range("C14").Value _
* Range("C16").Value * wsMES.Range("C4").Value

End Sub

Private Sub 補助()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsDetail.Range("P10") = wsData.Range("C19").Value

End Sub


Private Sub その他()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsDetail.Range("AB10") = wsData.Range("C21").Value

End Sub

Private Sub 通勤()

Set wsDetail = Worksheets("給与明細")
Set wsData = Worksheets("データ入力")
Set wsMES = Worksheets("MES歩率表")

wsData.Range("C27") = Application.RoundUp(wsData.Range("C25").Value * 2 * 0.083 * _
Range("C24").Value * Range("C23").Value, 1)

wsDetail.Range("D13") = Application.WorksheetFunction.Round _
(wsData.Range("C27").Value * Range("C26").Value * 1.08, 0)

End Sub


原因がさっぱりわからないのでどなたかよろしくお願いいたします<m(__)m>

投稿日時 - 2014-05-19 15:53:32

QNo.8601836

すぐに回答ほしいです

質問者が選んだベストアンサー

所々、ワークシートの指定が無いRangeプロパティが使われているのが原因では?

>wsDetail.Range("H10") = wsData.Range("C8").Value * Range("C5").Value
⇒wsDetail.Range("H10") = wsData.Range("C8").Value * ws??????.Range("C5").Value

>wsDetail.Range("L10") = wsData.Range("C14").Value _
>* Range("C16").Value * wsMES.Range("C4").Value
⇒wsDetail.Range("L10") = wsData.Range("C14").Value _
⇒* ws??????.Range("C16").Value * wsMES.Range("C4").Value

>wsData.Range("C27") = Application.RoundUp(wsData.Range("C25").Value * 2 * 0.083 * _
>Range("C24").Value * Range("C23").Value, 1)
⇒wsData.Range("C27") = Application.RoundUp(wsData.Range("C25").Value * 2 * 0.083 * _
⇒ws???????.Range("C24").Value * ws??????.Range("C23").Value, 1)

>wsDetail.Range("D13") = Application.WorksheetFunction.Round _
>(wsData.Range("C27").Value * Range("C26").Value * 1.08, 0)
⇒wsDetail.Range("D13") = Application.WorksheetFunction.Round _
⇒(wsData.Range("C27").Value * ws??????.Range("C26").Value * 1.08, 0)

「??????」の部分に何が入るのかは、質問者さんが判っている筈なので、適切な変数名を書き込む事。

ワークシートの指定が無いRangeは「カレントのアクティブシート」からデータを引っ張ってくるので、そのシートが「想定してないシート」であれば、文字列セルや空白セルからデータを引っ張って来て「掛け算できんぞゴルァ」って事になる。

投稿日時 - 2014-05-19 16:09:53

お礼

なるほど、、、
確かにそうですね(・_・;)
ありがとうございました。本当にお世話になりました_(_^_)_
最後の一文になぜかワロタ(^○^)

投稿日時 - 2014-05-19 16:20:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問