2017-08-25 69 views
1

我正在使用下拉列表內容控件處理開始時間和結束時間表。我試圖找出如何計算總工作時間取決於時間在列表和超時列表中的選擇。有一個小問題,因爲我有一個命令按鈕來添加和刪除表的行,以便只顯示必要的內容,而不是在表中存在大量未使用的行。MS Word VBA計算表中的時間和超時

每次在1/4小時的時間間隔,我試圖讓結果被格式化,以便0:15爲0.25,0:30爲0.50等

一兩件事有關時間下拉列表。你會在代碼中注意到每個下拉列表中有多少個條目。有沒有辦法讓這個更有效率,或者真的是讓每件物品上市的唯一方法?這很瘋狂。

非常感謝!

Sub MakeLaborRow(oTable As Table) 
Dim oNewRow As Row 
Dim oRng As Range 
Dim oCell As Cell 
Dim iCell As Integer 
Dim oCC As ContentControl, oCC1 As ContentControl, oCC2 As ContentControl 
Dim lngCell1 As Long, lngCell2 As Long 
lngCell1 = 0: lngCell2 = 0 
If Not ActiveDocument.ProtectionType = wdNoProtection Then 
    ActiveDocument.Unprotect 
End If 
Set oNewRow = oTable.Rows.Add 
oNewRow.Range.Font.Bold = False 
For iCell = 1 To 6 
    Set oCell = oNewRow.Cells(iCell) 
    Set oRng = oCell.Range 
    oRng.End = oRng.End - 1 
    Select Case iCell 
     Case 1 
      Set oCC = oRng.ContentControls.Add _ 
         (Range:=oRng, _ 
         Type:=wdContentControlDate) 
      With oCC 
       .SetPlaceholderText , , "Select Date" 
       .DateDisplayFormat = "ddd MM/dd/yyyy" 
       .Tag = "Date" & oCell.RowIndex 
      End With 
     Case 2 
      Set oCC = oRng.ContentControls.Add(wdContentControlDropdownList) 
      With oCC 
       .SetPlaceholderText , , "Choose Description" 
       .DropdownListEntries.Add "Labor Time" 
       .DropdownListEntries.Add "Travel Time" 
       .DropdownListEntries.Add "Wait Time" 
       .Tag = "Description" & oCell.RowIndex 
      End With 
     Case 3 
      Set oCC = oRng.ContentControls.Add(wdContentControlDropdownList) 
      With oCC 
       .SetPlaceholderText , , "Time In " 
       .DropdownListEntries.Add "12:00 AM" 
       .DropdownListEntries.Add "12:15 AM" 
       .DropdownListEntries.Add "12:30 AM" 
       .DropdownListEntries.Add "12:45 AM" 
       .DropdownListEntries.Add "1:00 AM" 
       .DropdownListEntries.Add "1:15 AM" 
       .DropdownListEntries.Add "1:30 AM" 
       .DropdownListEntries.Add "1:45 AM" 
       .DropdownListEntries.Add "2:00 AM" 
       .DropdownListEntries.Add "2:15 AM" 
       .DropdownListEntries.Add "2:30 AM" 
       .DropdownListEntries.Add "2:45 AM" 
       .DropdownListEntries.Add "3:00 AM" 
       .DropdownListEntries.Add "3:15 AM" 
       .DropdownListEntries.Add "3:30 AM" 
       .DropdownListEntries.Add "3:45 AM" 
       .DropdownListEntries.Add "4:00 AM" 
       .DropdownListEntries.Add "4:15 AM" 
       .DropdownListEntries.Add "4:30 AM" 
       .DropdownListEntries.Add "4:45 AM" 
       .DropdownListEntries.Add "5:00 AM" 
       .DropdownListEntries.Add "5:15 AM" 
       .DropdownListEntries.Add "5:30 AM" 
       .DropdownListEntries.Add "5:45 AM" 
       .DropdownListEntries.Add "6:00 AM" 
       .DropdownListEntries.Add "6:15 AM" 
       .DropdownListEntries.Add "6:30 AM" 
       .DropdownListEntries.Add "6:45 AM" 
       .DropdownListEntries.Add "7:00 AM" 
       .DropdownListEntries.Add "7:15 AM" 
       .DropdownListEntries.Add "7:30 AM" 
       .DropdownListEntries.Add "7:45 AM" 
       .DropdownListEntries.Add "8:00 AM" 
       .DropdownListEntries.Add "8:15 AM" 
       .DropdownListEntries.Add "8:30 AM" 
       .DropdownListEntries.Add "8:45 AM" 
       .DropdownListEntries.Add "9:00 AM" 
       .DropdownListEntries.Add "9:15 AM" 
       .DropdownListEntries.Add "9:30 AM" 
       .DropdownListEntries.Add "9:45 AM" 
       .DropdownListEntries.Add "10:00 AM" 
       .DropdownListEntries.Add "10:15 AM" 
       .DropdownListEntries.Add "10:30 AM" 
       .DropdownListEntries.Add "10:45 AM" 
       .DropdownListEntries.Add "11:00 AM" 
       .DropdownListEntries.Add "11:15 AM" 
       .DropdownListEntries.Add "11:30 AM" 
       .DropdownListEntries.Add "11:45 AM" 
       .DropdownListEntries.Add "12:00 PM" 
       .DropdownListEntries.Add "12:15 PM" 
       .DropdownListEntries.Add "12:30 PM" 
       .DropdownListEntries.Add "12:45 PM" 
       .DropdownListEntries.Add "1:00 PM" 
       .DropdownListEntries.Add "1:15 PM" 
       .DropdownListEntries.Add "1:30 PM" 
       .DropdownListEntries.Add "1:45 PM" 
       .DropdownListEntries.Add "2:00 PM" 
       .DropdownListEntries.Add "2:15 PM" 
       .DropdownListEntries.Add "2:30 PM" 
       .DropdownListEntries.Add "2:45 PM" 
       .DropdownListEntries.Add "3:00 PM" 
       .DropdownListEntries.Add "3:15 PM" 
       .DropdownListEntries.Add "3:30 PM" 
       .DropdownListEntries.Add "3:45 PM" 
       .DropdownListEntries.Add "4:00 PM" 
       .DropdownListEntries.Add "4:15 PM" 
       .DropdownListEntries.Add "4:30 PM" 
       .DropdownListEntries.Add "4:45 PM" 
       .DropdownListEntries.Add "5:00 PM" 
       .DropdownListEntries.Add "5:15 PM" 
       .DropdownListEntries.Add "5:30 PM" 
       .DropdownListEntries.Add "5:45 PM" 
       .DropdownListEntries.Add "6:00 PM" 
       .DropdownListEntries.Add "6:15 PM" 
       .DropdownListEntries.Add "6:30 PM" 
       .DropdownListEntries.Add "6:45 PM" 
       .DropdownListEntries.Add "7:00 PM" 
       .DropdownListEntries.Add "7:15 PM" 
       .DropdownListEntries.Add "7:30 PM" 
       .DropdownListEntries.Add "7:45 PM" 
       .DropdownListEntries.Add "8:00 PM" 
       .DropdownListEntries.Add "8:15 PM" 
       .DropdownListEntries.Add "8:30 PM" 
       .DropdownListEntries.Add "8:45 PM" 
       .DropdownListEntries.Add "9:00 PM" 
       .DropdownListEntries.Add "9:15 PM" 
       .DropdownListEntries.Add "9:30 PM" 
       .DropdownListEntries.Add "9:45 PM" 
       .DropdownListEntries.Add "10:00 PM" 
       .DropdownListEntries.Add "10:15 PM" 
       .DropdownListEntries.Add "10:30 PM" 
       .DropdownListEntries.Add "10:45 PM" 
       .DropdownListEntries.Add "11:00 PM" 
       .DropdownListEntries.Add "11:15 PM" 
       .DropdownListEntries.Add "11:30 PM" 
       .DropdownListEntries.Add "11:45 PM" 
       .Tag = "TimeIn" & oCell.RowIndex 
      End With 
     Case 4 
      Set oCC = oRng.ContentControls.Add(wdContentControlDropdownList) 
      With oCC 
       .SetPlaceholderText , , "Time Out" 
       .DropdownListEntries.Add "12:00 AM" 
       .DropdownListEntries.Add "12:15 AM" 
       .DropdownListEntries.Add "12:30 AM" 
       .DropdownListEntries.Add "12:45 AM" 
       .DropdownListEntries.Add "1:00 AM" 
       .DropdownListEntries.Add "1:15 AM" 
       .DropdownListEntries.Add "1:30 AM" 
       .DropdownListEntries.Add "1:45 AM" 
       .DropdownListEntries.Add "2:00 AM" 
       .DropdownListEntries.Add "2:15 AM" 
       .DropdownListEntries.Add "2:30 AM" 
       .DropdownListEntries.Add "2:45 AM" 
       .DropdownListEntries.Add "3:00 AM" 
       .DropdownListEntries.Add "3:15 AM" 
       .DropdownListEntries.Add "3:30 AM" 
       .DropdownListEntries.Add "3:45 AM" 
       .DropdownListEntries.Add "4:00 AM" 
       .DropdownListEntries.Add "4:15 AM" 
       .DropdownListEntries.Add "4:30 AM" 
       .DropdownListEntries.Add "4:45 AM" 
       .DropdownListEntries.Add "5:00 AM" 
       .DropdownListEntries.Add "5:15 AM" 
       .DropdownListEntries.Add "5:30 AM" 
       .DropdownListEntries.Add "5:45 AM" 
       .DropdownListEntries.Add "6:00 AM" 
       .DropdownListEntries.Add "6:15 AM" 
       .DropdownListEntries.Add "6:30 AM" 
       .DropdownListEntries.Add "6:45 AM" 
       .DropdownListEntries.Add "7:00 AM" 
       .DropdownListEntries.Add "7:15 AM" 
       .DropdownListEntries.Add "7:30 AM" 
       .DropdownListEntries.Add "7:45 AM" 
       .DropdownListEntries.Add "8:00 AM" 
       .DropdownListEntries.Add "8:15 AM" 
       .DropdownListEntries.Add "8:30 AM" 
       .DropdownListEntries.Add "8:45 AM" 
       .DropdownListEntries.Add "9:00 AM" 
       .DropdownListEntries.Add "9:15 AM" 
       .DropdownListEntries.Add "9:30 AM" 
       .DropdownListEntries.Add "9:45 AM" 
       .DropdownListEntries.Add "10:00 AM" 
       .DropdownListEntries.Add "10:15 AM" 
       .DropdownListEntries.Add "10:30 AM" 
       .DropdownListEntries.Add "10:45 AM" 
       .DropdownListEntries.Add "11:00 AM" 
       .DropdownListEntries.Add "11:15 AM" 
       .DropdownListEntries.Add "11:30 AM" 
       .DropdownListEntries.Add "11:45 AM" 
       .DropdownListEntries.Add "12:00 PM" 
       .DropdownListEntries.Add "12:15 PM" 
       .DropdownListEntries.Add "12:30 PM" 
       .DropdownListEntries.Add "12:45 PM" 
       .DropdownListEntries.Add "1:00 PM" 
       .DropdownListEntries.Add "1:15 PM" 
       .DropdownListEntries.Add "1:30 PM" 
       .DropdownListEntries.Add "1:45 PM" 
       .DropdownListEntries.Add "2:00 PM" 
       .DropdownListEntries.Add "2:15 PM" 
       .DropdownListEntries.Add "2:30 PM" 
       .DropdownListEntries.Add "2:45 PM" 
       .DropdownListEntries.Add "3:00 PM" 
       .DropdownListEntries.Add "3:15 PM" 
       .DropdownListEntries.Add "3:30 PM" 
       .DropdownListEntries.Add "3:45 PM" 
       .DropdownListEntries.Add "4:00 PM" 
       .DropdownListEntries.Add "4:15 PM" 
       .DropdownListEntries.Add "4:30 PM" 
       .DropdownListEntries.Add "4:45 PM" 
       .DropdownListEntries.Add "5:00 PM" 
       .DropdownListEntries.Add "5:15 PM" 
       .DropdownListEntries.Add "5:30 PM" 
       .DropdownListEntries.Add "5:45 PM" 
       .DropdownListEntries.Add "6:00 PM" 
       .DropdownListEntries.Add "6:15 PM" 
       .DropdownListEntries.Add "6:30 PM" 
       .DropdownListEntries.Add "6:45 PM" 
       .DropdownListEntries.Add "7:00 PM" 
       .DropdownListEntries.Add "7:15 PM" 
       .DropdownListEntries.Add "7:30 PM" 
       .DropdownListEntries.Add "7:45 PM" 
       .DropdownListEntries.Add "8:00 PM" 
       .DropdownListEntries.Add "8:15 PM" 
       .DropdownListEntries.Add "8:30 PM" 
       .DropdownListEntries.Add "8:45 PM" 
       .DropdownListEntries.Add "9:00 PM" 
       .DropdownListEntries.Add "9:15 PM" 
       .DropdownListEntries.Add "9:30 PM" 
       .DropdownListEntries.Add "9:45 PM" 
       .DropdownListEntries.Add "10:00 PM" 
       .DropdownListEntries.Add "10:15 PM" 
       .DropdownListEntries.Add "10:30 PM" 
       .DropdownListEntries.Add "10:45 PM" 
       .DropdownListEntries.Add "11:00 PM" 
       .DropdownListEntries.Add "11:15 PM" 
       .DropdownListEntries.Add "11:30 PM" 
       .DropdownListEntries.Add "11:45 PM" 
       .Tag = "TimeOut" & oCell.RowIndex 
      End With 
     Case 5 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .SetPlaceholderText , , "Total Hrs." 
       .Tag = "TotalHrs" & oCell.RowIndex 
      End With 
     Case 6 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .SetPlaceholderText , , "---" 
       .Tag = "Mileage" & oCell.RowIndex 
      End With 
    End Select 
Next iCell 
oNewRow.Cells(1).Select 
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, _ 
Password:="" 

lbl_Exit: 
Set oCell = Nothing 
Set oCC = Nothing 
Set oCC1 = Nothing 
Set oCC2 = Nothing 
Set oRng = Nothing 
Set oTable = Nothing 
Set oNewRow = Nothing 
Exit Sub 
End Sub 

回答

0

嘗試添加並調用它,當你需要計算以小時爲單位的小時差。

Sub TimeConversion() 

Dim strStart As String 
Dim strEnd As String 
Dim starttime As Variant 
Dim endtime As Variant 
Dim SplitStart 
Dim SplitEnd 
Dim StartResult As Long, EndResult As Long 
Dim HoursWorked As Long 

strStart = "9:00 AM" 
strEnd = "5:00 PM" 

''''''' 
starttime = Left(strStart, Len(strStart) - 3) 
SplitStart = Split(starttime, ":") 
StartResult = SplitStart(0) + ((SplitStart(1) * 100)/60)/100 

''''''' 
endtime = Left(strEnd, Len(strEnd) - 3) 
SplitEnd = Split(endtime, ":") 
EndResult = (SplitEnd(0) + ((SplitEnd(1) * 100)/60)/100) + 12 

HoursWorked = (EndResult - StartResult) 
'MsgBox HoursWorked 

End Sub 
+0

我可以把這個插入ContentControlOnExit嗎? – BradBerger