返回列表 上一主題 發帖

[發問] [資料區域的選擇]含公式但無數值的儲存格視為空白

回復 10# jackson7015
Ar(Xi, 1) = .[B3]                       '日期
,剩下的那個逗點再好好研究
  1. With [10].Font
  2.         .Name = "新細明體"
  3.         .FontStyle = "標準"
  4.         .Size = 11
  5.         .Strikethrough = False
  6.         .Superscript = False
  7.         .Subscript = False
  8.         .OutlineFont = False
  9.         .Shadow = False
  10.         .Underline = xlUnderlineStyleNone
  11.         .ColorIndex = 1
  12.     End With
複製代碼

TOP

回復 11# GBKEE


    瞭解了,自己也試過[B3],卻出現錯誤,少一個逗點真的就差好多

感謝版主指導

TOP

回復 11# GBKEE

這兩天新增了一些項目,可是忽然出現第六行"溢位"錯誤訊息

可以麻煩幫忙看看是怎樣的錯誤嗎
  1. Sub 累計日報表資料()
  2.     If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
  3.     Dim Ar(), Rng As Range, Xi As Integer
  4.     With Sheets("日報表")
  5.         Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有資料的列
  6.         ReDim Ar(1 To Rng.Count, 1 To 20)          '陣列的大小 1 To 20 => 資料範圍 B欄:V欄
  7.         For Xi = 1 To Rng.Count
  8.             Ar(Xi, 1) = .[B3]                      '日期
  9.             Ar(Xi, 2) = .Cells(Rng(Xi).Row, "B")   '編號
  10.             Ar(Xi, 3) = .Cells(Rng(Xi).Row, "N")   '電
  11.             Ar(Xi, 4) = .Cells(Rng(Xi).Row, "D")   '地點
  12.             SS = "=IF(RC[4]=1,""查無"",IF(RC[3]=1,""成案"" & SUM(RC[6]:RC[9])&""KW"",""""))"
  13.             Ar(Xi, 5) = SS                         '是否成案
  14.             Ar(Xi, 6) = .Cells(Rng(Xi).Row, "E")   '密
  15.             Ar(Xi, 7) = .Cells(Rng(Xi).Row, "F")   '非密
  16.             KK = "=IF(COUNTA(RC[+1]),""是"",IF(COUNTA(RC[+2]),""否"",""""))"
  17.             Ar(Xi, 8) = KK                         '現場檢驗結果
  18.             Ar(Xi, 9) = .Cells(Rng(Xi).Row, "G")   '是
  19.             Ar(Xi, 10) = .Cells(Rng(Xi).Row, "H")  '否
  20.             Ar(Xi, 11) = .Cells(Rng(Xi).Row, "I")  '燈(惡
  21.             Ar(Xi, 12) = .Cells(Rng(Xi).Row, "J")  '力(惡
  22.             Ar(Xi, 13) = .Cells(Rng(Xi).Row, "K")  '燈(非惡
  23.             Ar(Xi, 14) = .Cells(Rng(Xi).Row, "L")  '力(非惡性
  24.             Ar(Xi, 15) = .Cells(Rng(Xi).Row, "A")  '項目
  25.             Ar(Xi, 16) = .Cells(Rng(Xi).Row, "O")  '營業
  26.             Ar(Xi, 17) = .Cells(Rng(Xi).Row, "R")  '行業別
  27.             Ar(Xi, 18) = .Cells(Rng(Xi).Row, "Q")  '方式
  28.             Ar(Xi, 19) = .Cells(Rng(Xi).Row, "S")  '移送
  29.             Ar(Xi, 20) = .Cells(Rng(Xi).Row, "P")  '部門
  30.          Next
  31.     End With
  32.          With Sheets("綜合資料庫").Cells(Rows.Count, "B").End(xlUp).Offset(1)
  33.          .Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
  34.     End With
  35. End Sub
複製代碼
ReDim Ar(1 To Rng.Count, 1 To 20)
出現錯誤

TOP

回復 13# jackson7015
傳檔看看

TOP

回復 14# GBKEE

之後要出差幾天

先附上檔案

123.rar (93.54 KB)

TOP

回復 15# jackson7015
Xi As Integer  這裡宣告 Integer 變數係以範圍為 -32,768 到 32,767 之 16 位元 (2 個位元組) 數字的形式儲存
修改為
Xi As Long   Long (長整數)變數係以範圍從 -2,147,483,648 到 2,147,483,647 之 32 位元 (4 個位元組) 有號數字形式儲存。Long 的型態宣告字元為 &。

Sub 累計日報表資料()
  '  *** If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub  移到下方
    Dim Ar(), Rng As Range, Xi As Long
    With Sheets("日報表")
        Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有資料的列
          ' *** 加上判斷日報表 沒有資料  ****
        If Application.CountA(Rng) = 0 Then MsgBox "日報表 沒有資料 !!!": Exit Sub   
        If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
        ReDim Ar(1 To Rng.Count, 1 To 20)          '陣列的大小 1 To 20 => 資料範圍 B欄:V欄
        For Xi = 1 To Rng.Count     '<-是這裡錯誤  Xi As Integer
'日報表 沒有資料  Rng.Count =Rows.Count-7 : 2003版 65,536 - 7  > 32,767

TOP

本帖最後由 jackson7015 於 2012-2-20 13:50 編輯

回復 16# GBKEE

今天測試了修改後的巨集

如果再日報表內只有1欄(如檔)資料,則使用巨集後會出現了錯誤訊息"執行階段錯誤1004"

這個錯誤只有在日報表只有一則資料才會發生,多於1則不會

附上檔案和代碼

工作日報表.rar (155.08 KB)
  1. Sub 累計日報表資料()
  2.     Dim Ar(), Rng As Range, Xi As Long
  3.     With Sheets("日報表")
  4.         Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有資料的列
  5.         If Application.CountA(Rng) = 0 Then MsgBox "日報表 沒有資料 !!!": Exit Sub '判斷日報表有沒有資料
  6.         If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
  7.         ReDim Ar(1 To Rng.Count, 1 To 20)          '陣列的大小 1 To 20 => 資料範圍 B欄:V欄
  8.         For Xi = 1 To Rng.Count
  9.             Ar(Xi, 1) = .[B3]                      '日期
  10.             Ar(Xi, 2) = .Cells(Rng(Xi).Row, "B")   '實調書編號
  11.             Ar(Xi, 3) = .Cells(Rng(Xi).Row, "N")   '電號
  12.             Ar(Xi, 4) = .Cells(Rng(Xi).Row, "D")   '地點
  13.             SS = "=IF(RC[4]=1,""查無竊電"",IF(RC[3]=1,""稽查成案"" & SUM(RC[6]:RC[9])&""KW"",""""))"
  14.             Ar(Xi, 5) = SS                         '是否成案
  15.             Ar(Xi, 6) = .Cells(Rng(Xi).Row, "E")   '密告
  16.             Ar(Xi, 7) = .Cells(Rng(Xi).Row, "F")   '非密告
  17.             KK = "=IF(COUNTA(RC[+1]),""是"",IF(COUNTA(RC[+2]),""否"",""""))"
  18.             Ar(Xi, 8) = KK                         '現場檢驗結果
  19.             Ar(Xi, 9) = .Cells(Rng(Xi).Row, "G")   '是
  20.             Ar(Xi, 10) = .Cells(Rng(Xi).Row, "H")  '否
  21.             Ar(Xi, 11) = .Cells(Rng(Xi).Row, "I")  '燈(惡性
  22.             Ar(Xi, 12) = .Cells(Rng(Xi).Row, "J")  '力(惡性
  23.             Ar(Xi, 13) = .Cells(Rng(Xi).Row, "K")  '燈(非惡性
  24.             Ar(Xi, 14) = .Cells(Rng(Xi).Row, "L")  '力(非惡性
  25.             Ar(Xi, 15) = .Cells(Rng(Xi).Row, "A")  '項目
  26.             Ar(Xi, 16) = .Cells(Rng(Xi).Row, "O")  '營業
  27.             Ar(Xi, 17) = .Cells(Rng(Xi).Row, "R")  '行業別
  28.             Ar(Xi, 18) = .Cells(Rng(Xi).Row, "Q")  '竊電方式
  29.             Ar(Xi, 19) = .Cells(Rng(Xi).Row, "S")  '移送情形
  30.             Ar(Xi, 20) = .Cells(Rng(Xi).Row, "P")  '提報部門
  31.          Next
  32.     End With
  33.          With Sheets("綜合資料庫").Cells(Rows.Count, "B").End(xlUp).Offset(1)
  34.          .Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
  35.     End With
  36. End Sub
複製代碼
.Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
第34行出現錯誤

請問要修改什麼呢?

而原本的Integer 變數,為什麼不直接使用Long變數就好,執行位元組較多
是否有版本的問題而不能直接使用Long變數?

TOP

回復 17# jackson7015
  1. With Sheets("日報表")
  2.         If .Cells(Rows.Count, "D").End(xlUp).Row = 4 Then   '偵查是否資料
  3.             MsgBox "日報表  沒有資料 !!"
  4.             Exit Sub
  5.         End If
  6.         Set Rng = .Range("d7", .Cells(Rows.Count, "D").End(xlUp)) '  **** 這裡改成 由下往上  資料範圍: B欄有資料的列
  7.         If Application.CountA(Rng) = 0 Then MsgBox "日報表 沒有資料 !!!": Exit Sub '判斷日報表有沒有資料
  8.         If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
複製代碼

TOP

回復 18# GBKEE


執行正常了,感謝版主

想問個問題,前面已經有函數判斷有無資料了,為何第7行還要判斷一次?

我刪除後好像也是能正常執行
  1. If Application.CountA(Rng) = 0 Then MsgBox "日報表 沒有資料 !!!": Exit Sub '判斷日報表有沒有資料
複製代碼

TOP

回復 19# jackson7015
你說的有理 那就是多餘了

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題