Board logo

標題: 執行vba出現應用程式定義錯誤 [打印本頁]

作者: eric093    時間: 2014-10-11 20:29     標題: 時間相減~資料型態不符

請問下述二個時間用vba相減並換算成秒數,但一直出現資料型態不符,請問是要修改哪?
序號         00:00:02        00:04:00

Sub test2()
Application.ScreenUpdating = False

Dim rng(1), E As Range
Set rng(1) = Sheets("sheets1").Range("A1", Range("A" & Rows.Count).End(xlUp))
For Each E In rng(1)
E.Offset(, 3) =( E.Offset(, 2)-E.Offset(, 2))*86400

Next
作者: ML089    時間: 2014-10-11 21:13

回復 1# eric093

E.Offset(, 3) =( E.Offset(, 2)-E.Offset(, 2))*86400
應該是筆誤
改為
E.Offset(, 3) =( E.Offset(, 2)-E.Offset(, 1))*86400
作者: eric093    時間: 2014-10-12 11:25     標題: 執行vba出現應用程式定義錯誤

請問下面執行時,時可正常執行,但有時出現應用程式定義錯誤,
若Sheets("貼這")刪除整個欄列工作頁執行時又可以,不知問題在哪


sub test ()
Application. screenupdate=false
Dim rng(1),M as Range
Sheets("貼這").Range(h:h).Clear
Set rng(1)=Sheets("貼這"). Range("A2",Range("A"&Rows.count).End(xlUp))
For Each M In rng(1)
M.Offset(,7)=(M.Offset(,3)-M.Offset(,2))*86400
If M.Offset(,7)<0 Then
   M.Offset(,7)==""
End If
Next
End sub
作者: GBKEE    時間: 2014-10-13 06:08

回復 1# eric093


Sheets("貼這").Range(h:h).Clear  

[attach]19327[/attach]


Sheets("貼這").Range("h:h").Clear

  1. 'Set rng(1) = Sheets("貼這").Range("A2", Range("A" & Rows.Count).End(xlUp))
  2. '程式碼在 "貼這"工作表模組上可行
  3. '如不在"貼這"工作表模組上,且 ActiveSheet 不是"貼這"工作表 ,會出錯
  4. '不在"貼這"工作表模組上建議修改
  5. With Sheets("貼這")
  6.     .Range("h:h").Clear
  7.     Set rng(1) = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
  8. End With
複製代碼

作者: eric093    時間: 2014-10-15 01:10

感謝版大相救!
但是出現處理速極緩慢!
原本檔案中就已有別的巨集,而我在這檔案中新增一個模組,單獨執行時其速度龜速的慢跑不了!
但以相同的資料貼在新增的活頁簿下執行時,一秒即可以完成!
ps:由於原檔案有大量的客戶資料及員工資料(無法將資料用其它代號替代,因為資料每欄資料都是客戶及員工資料),所以不方便上傳,請見諒!
作者: GBKEE    時間: 2014-10-15 05:30

本帖最後由 GBKEE 於 2014-10-15 05:36 編輯

回復 5# eric093


   
而我在這檔案中新增一個模組,單獨執行時其速度龜速的慢跑不了

試試看
  1. Option Explicit
  2. Sub test()
  3.     Dim Rng As Range
  4.     'Application.screenupdate = False 'screenupdate ????
  5.     Application.ScreenUpdating = False
  6.     With Sheets("貼這")
  7.         .Range("h:h").Clear
  8.         'Set rng(1) = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
  9.         Set Rng = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 7)
  10.         With Rng
  11.             .Formula = "=if((d2-c2) * 86400>0,(d2-c2) * 86400,0)" '給公式
  12.             .Value = .Value    '將範圍的公式轉為值
  13.         End With
  14.     End With
  15.     Application.ScreenUpdating = True
  16. End Sub
複製代碼
ps:由於原檔案有大量的客戶資料及員工資料(無法將資料用其它代號替代,因為資料每欄資料都是客戶及員工資料),所以不方便上傳,請見諒!

維護個資(公司的機密)可修改資料,上傳修改的部份即可
作者: eric093    時間: 2014-10-15 22:17

謝謝各位版主,原來可以換個方式想!!問題排除了!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)