2

IN 、 OUT& OverTime の 3 つのセルがすべて [h]:mm としてフォーマットされています。OT セルにはこのフォーラムがあります。

=ROUND(IF(((D10-C10)+(D11-C11))*24>7,((D10-C10)+(D11-C11))*24-7,0)/24*96,0)/96 

OT を 1/4 時間単位で計算する

8 C D E F 
9   IN      OUT      O/T  C/T
10 7:30 AM 12:15 PM 1:45
11 1:00 PM 5:00 PM

   従業員がその日の退勤時に、次のコードを実行したいと思います。

Dim CT As Date
Title = "Add to CompTime from OverTime"
If Range("E10") > 0 Then
CT = InputBox("Add Hours to CompTime?", Title)
If CT > 0 Then Range("F10").Value = ("E10" - CT)
Else: Range("F10").Value = " "
End If
End Sub

すべてがうまくいくようです。If CT > 0 Then Range("F10").Value = ("E10" - CT) フォーマットの問題であることはわかっていますが、問題を解決できません。

4

1 に答える 1

0

シートまたはモジュール上にあるかどうかにかかわらず、常に範囲への明示的な参照を行うようにしてください。オブジェクトの適切なプロパティを使用してください。あなたの場合、修飾されていないE10範囲があります。シート 1 で作業していると仮定します。

Option Explicit
'--Beginning of your Subroutine...
Dim Title as String '-- assuming
Dim CT As Date '-- are you sure you want to have a date here?

Title = "Add to CompTime from OverTime"

  If Sheets(1).Range("E10").Value > 0 Then '-- assuming it's a valid date here...
    CT = InputBox("Add Hours to CompTime?", Title)
    '-- assume your CT = 2:45 and OT = 75:30
    '-- use the following as mentioned in my comment
    If CT > 0 Then 
       Application.Text( Sheets(1).Range("F10").Value ,"[h]:mm")  = 
       Application.Text(Sheets(1).Range("E10").Value, "[h]:mm") - Application.Text(CT, "[h]:mm") 
    Else
       Sheets(1).Range("F10").Value = " "
    End If
  End If
End Sub

PS: 時間を計算しようとしている場合は、VBA を使用してすべての計算を行う必要があるかもしれません.. =)

于 2013-01-28T03:07:23.247 に答える