Board logo

標題: [發問] 想請問如何解決『執行階段錯誤“13",型態不符合』 [打印本頁]

作者: HSINLI    時間: 2015-7-16 12:12     標題: 想請問如何解決『執行階段錯誤“13",型態不符合』

此程式碼在執行的時候在
Range("e" & j) = (hilow.Offset(0, 5).Value - Range("b" & j).Value) / hilow.Offset(0, 5).Value
這地方,一直出現『執行階段錯誤“13",型態不符合』錯誤,
hilow 是搜尋結果得到的儲存格變量
然後我是想將搜尋結果那一行的儲存格值hilow.Offset(0, 5)貼到另一工作表上

請問要如何改進才能debug,謝謝!

ps.此為擷取一部分主要出問題的程式碼,完整的於附件
  1. Sub test()

  2.     Dim Blast As Integer
  3.     Dim hilow As Range
  4.     Dim j As Integer
  5.    
  6.   
  7.   Blast = Range("AA4").End(xlDown).Row
  8.   For j = 6 To (Blast * 2) - 1 Step 2
  9.        Set hilow = Sheets("G.&E.").Range("c:j").Find(Range("a" & j))
  10.          If Not hilow Is Nothing Then
  11.             Range("e" & j) = (hilow.Offset(0, 5).Value - Range("b" & j).Value) / hilow.Offset(0, 5).Value
  12.             Range("e" & j + 1) = (hilow.Offset(0, 6).Value - Range("b" & j)) / hilow.Offset(0, 6).Value
  13.          End If
  14.           Range("D" & j) = "=(B" & j & "-C" & j & ")/B" & j
  15.   Next j

  16. End Sub
複製代碼
[attach]21393[/attach]
作者: stillfish00    時間: 2015-7-16 18:12

本帖最後由 stillfish00 於 2015-7-16 18:16 編輯

回復 1# HSINLI
j = 80時 , Find "NGE" 去找到 標題欄的 "change"

可以改成這樣
Set hilow = Sheets("G.&E.").Range("c:c").Find(Range("a" & j), LookAt:=xlWhole)
作者: GBKEE    時間: 2015-7-16 20:54

回復 1# HSINLI

這段程式碼會拖延程式執行的速度
  1. Blast = Range("AA4").End(xlDown).Row '將下載市價儲存格加大
  2. For i = 7 To (Blast * 2) Step 2
  3.     Cells(i, 2).Insert shift:=xlDown '增加儲存格
  4.     Range("b" & i - 1 & ":b" & i).Select '合併儲存格
  5.    Selection.MergeCells = True
  6.    With Selection.Borders(xlEdgeTop)
  7.         .LineStyle = xlContinuous
  8.         .ColorIndex = 0
  9.         .TintAndShade = 0
  10.         .Weight = xlThin
  11.     End With
  12.     With Selection.Borders(xlEdgeBottom)
  13.         .LineStyle = xlContinuous
  14.         .ColorIndex = 0
  15.         .TintAndShade = 0
  16.         .Weight = xlThin
  17.         End With
  18.         Selection.NumberFormatLocal = "0.00_ "
  19. Next i
複製代碼
可修改為如下試試看
  1. Dim Ar(), x As Integer
  2.     Ar = Range("b6", Range("b6").End(xlDown)).Value     'B欄的值導入陣列
  3.     With Range("A6", Range("A" & Rows.Count).End(xlUp)) 'A欄的合併儲存格
  4.         .Select
  5.         Selection.Copy Range("B6")                       '複製到 B欄
  6.         With .Offset(, 1)                                'B欄
  7.             For i = 1 To .Cells.Count Step 2
  8.                 x = Application.Round(i - (i / 2), 0)    '陣列元素的索引值 (四捨五入運算的結果)
  9.                 .Cells(i) = Ar(x, 1)
  10.             Next
  11.             With .Borders
  12.                 .LineStyle = xlContinuous
  13.                 .ColorIndex = 0
  14.                 .Weight = xlThin
  15.                 .TintAndShade = 0
  16.             End With
  17.         End With
  18.     End With
複製代碼

作者: HSINLI    時間: 2015-7-20 13:03

回復 2# stillfish00

想請問一下s大
是怎樣測出來說在j=80時,出問題的啊!?
下次想自己抓抓看問題在哪
作者: HSINLI    時間: 2015-7-20 13:04

回復 3# GBKEE

謝謝g大!
可行且真的比較快,謝謝你!
作者: stillfish00    時間: 2015-7-23 19:41

回復 4# HSINLI
因為沒彈出偵錯按鈕
我是用下面這樣停到發生錯誤的那行,再去看變數
  1. Private Sub CommandButton2_Click()
  2. On Error GoTo ERR_HANDLE
  3.    
  4.     ...

  5. Exit Sub
  6. ERR_HANDLE:
  7.     Stop    'F8 to resume error line
  8.     Resume
  9. End Sub
複製代碼





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