2017-12-03 228 views
0

我想創建一個宏以防止用戶打印表單,如果他們不填寫所有單元格。不過,我得到一個錯誤信息:運行時錯誤1004 - BeforePrint - 避免打印如果單元格爲空

enter image description here

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
If Application.Sheets("Form").Range("B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4,M4,B5,C5,D5,E5,F5,G5,H5,I5,J5,K5,L5,M5,B6,C6,D6,E6,F6,G6,H6,I6,J6,K6,L6,M6,B7,C7,D7,E7,F7,G7,H7,I7,J7,K7,L7,M7,B8,C8,D8,E8,F8,G8,H8,I8,B9,C9,D9,E9,F9,G9,H9,I9,B11,C11,D11,E11,F11,G11,H11,I11,B12,C12,D12,E12,F12,G12,H12,I12,B13,C13,D13,E13,F13,G13,H13,I13,B14,C14,D14,E14,F14,G14,H14,I14,B16,C16,D16,E16,F16,G16,H16,I16,B17,C17,D17,E17,F17,G17,H17,I17").Value = "" Then 
Cancel = True 
MsgBox "Fill out all the cells" 
End If 
End Sub 

我有具有較少細胞的另一種形式的另一個宏和一個工作得很好:我能做些什麼

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
If Application.Sheets("Form 2").Range("C4,C5,C6,D4,D5,D6,F4,F5,F6,B8,B9,B10,B11,C8,C9,C10,C11,D8,D9,D10,D11,E8,E9,E10,E11,C13,D13,C16,C17,C18,F16,F17,F18,C22,D22").Value = "" Then 
Cancel = True 
MsgBox "Fill out all the cells" 
End If 
End Sub 

解決這個問題?

+0

這第二個真正的作品? (B4:M7「)與範圍(」B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4,M4,B5,C5,D5,E5 ,F5,G5,H5,I5,J5,K5,L5,M5,B6,C6,D6,E6,F6,G6,H6,I6,J6,K6,L6,M6,B7,C7,D7,E7,F7 ,G7,H7,I7,J7,K7,L7,M7「) –

+0

謝謝,我用更好的範圍編輯了我的答案,我應該注意到... – garbb

+0

[Range limit conundrum](https:// stackoverflow.com/questions/1663264/range-limit-conundrum) – YowE3K

回答

0

似乎線長度有限制,或者可以放入一個範圍()的字符串有多長。但是你可以像這樣整合它。此外,我認爲具有多個單元格的範圍()中的返回值是一個數組,因此我不確定將它與字符串進行比較是否有效。

試試這個:

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
    For Each cell In Application.Sheets("Form").Range("B4:M7,B8:I9,B11:I14,B16:I17") 
     If cell.Value = "" Then 
      Cancel = True 
      MsgBox "Fill out all the cells" 
      Exit Sub 
     End If 
    Next 
End Sub 
+0

我今天會嘗試這個建議,並會讓你知道它是如何發生的。謝謝。 – VeganGirl

+0

現在我收到另一個錯誤: 運行時錯誤'13':類型不匹配 有沒有其他建議?謝謝! – VeganGirl

+0

錯誤是哪一行?當出現錯誤彈出窗口時,單擊調試並查看突出顯示的行。我在一個名爲「Form」的空白Excel表格中測試了這段代碼,它對我來說工作得很好。 – garbb