2016-02-14 65 views
0

時間值增加一個小時我得到mismatch Error,當我嘗試添加1小時,時間價值對細胞"J8"如何修改在細胞

我怎麼修改添加一個小時?

With Range("J8") 
    .Value = "='" & FilePath & "[Report.xlsm]Data'!J8" '// J8 = 02/12/2016 08:17 AM CST 
    .Value = Mid(.Value, 12, 12) '// J8 = 08:17 AM CST 
    .Value = .Value + TimeSerial(1, 0, 0) ' <-- Error mismatch 
End With 
+0

也許你可以聲明一個變量來保存時間和分配給變量(因而脅迫的數據,當您去),你把它分配給範圍之前。 –

+0

@JohnColeman不起作用 - 我可能做錯了什麼,你能舉一些例子嗎? – 0m3r

+0

這只是一個想法。這是不是100%清楚你想要做什麼。從公式到值到修改值似乎都是圍繞着 - 爲什麼不直接從其他工作簿中讀取值直接寫入變量變量,然後找出如何修改它,也許使用'Debug.Print typenam(var )'看看VBA如何解釋這個價值。然後在你想修改這個值之後 - 把它放到單元格中。 –

回答

2

您可能必須自己從一個字符串轉換時間。 Mid function正在返回一個字符串;將其轉換爲TimeValue。 TimeValue不接受時區縮寫,因此必須將其刪除。

dim sTZ as string 
With Range("J8") 
    .Value = "='" & FilePath & "[Report.xlsm]Data'!J8" '// J8 = 02/12/2016 08:17 AM CST 
    sTZ = Mid(.Value, 21, 3) 
    .Value = TimeValue(Mid(.Value, 12, 8)) '// J8 = 08:17 AM (No time zone) 
    .Value = .Value + TimeSerial(1, 0, 0) ' <-- Time is added to time; no mismatch 
    'optionally put the time zone back in 
    '.value = .value & chr(32) & sTZ 
    'optionally keep the time as time and format the time zone back in 
    '.numberformat = "hh:mm AM/PM C\ST" 
End With 

如果保持與UTC的關係時間是關鍵任務,那麼您將不得不連接後端的時區信息。這將轉換表示時間帶的時間字符串中的時間值。如果您只是更改了Range.NumberFormat property,則可以避免轉換爲字符串。

將大量時區硬編碼爲自定義數字格式可能不切合實際。以下內容將從原始文本看起來像一次一樣地構建具有適當時區的自定義數字格式。

Dim sTZ As String, sTZmask As String 
With Range("J8") 
    .Value = "='" & FilePath & "[Report.xlsm]Data'!J8" '// J8 = 02/12/2016 08:17 AM CST 
    sTZ = Mid(.Value, 21, 3) 
    'split the time zone and stitch it back together with the number format escape character 
    sTZmask = Join(Split(StrConv(Chr(32) & sTZ, vbUnicode), vbNullChar), Chr(92)) 
    'remove any trailing escape characters 
    Do While Right(sTZmask, 1) = Chr(92): sTZmask = Left(sTZmask, Len(sTZmask) - 1): Loop 
    .Value = TimeValue(Mid(.Value, 12, 8)) '// J8 = 08:17 AM (No time zone) 
    .Value = .Value + TimeSerial(1, 0, 0) ' <-- Time is added to time; no mismatch 
    'keep the time as time and format the time zone back in 
    .NumberFormat = "hh:mm AM/PM" & sTZmask 
End With 
+0

非常有趣的信息,Thanx Jeeped – 0m3r

0
With Range("J8") 
    .Value = "='" & FilePath & "[Report.xlsm]Data'!J8" '// J8 = 02/12/2016 08:17 AM CST 
    .Value = TimeValue(Mid(.Value, 12, 8)) '// J8 = 08:17 AM CST 
    .NumberFormat = "hh:mm AM/PM C\ST" 
    .Value = .Value + TimeSerial(1, 0, 0) '// Add 1 Hour 09:17 
End With 

感謝Jeeped