2016-10-11 47 views
1

我需要VBA代碼來檢查範圍內的空單元格。如果在該範圍內有任何空格,應該出現一個框讓您鍵入要替換空白的內容。下面的代碼做我想要的,但即使沒有任何空白,也會出現提示ALWAYS。我該怎麼做才能讓盒子只有在有空白時纔會出現?提示用自定義文本替換空單元格

Sub ReplaceBlanks() 
    Dim Lastrow As Integer 
    Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

    Range("D84:D" & Lastrow).Select 
    Dim cell As Range 
    Dim InputValue As String 
    On Error Resume Next 
    InputValue = InputBox("Enter value that will fill empty cells in selection", "Fill Empty Cells") 
    For Each cell In Selection 
    If IsEmpty(cell) Then 
     cell.Value = InputValue 
    End If 
    Next 
End Sub 
+2

正確縮進你的代碼將有助於使你的代碼更易於閱讀/後續 - 爲您和其他人看它。 「For」和「Next」之間的任何內容都需要TAB; 'If​​'和'End If'之間的任何東西都需要一個TAB; 'Sub'和'End Sub'之間的任何東西都需要一個TAB。 –

+1

你想要**一個**值來填充所有單元格嗎?或者,對於每個空單元格,它可能是不同的'InputValue'? – BruceWayne

+0

@BruceWayne填充所有空白單元格的一個值。 – Robby

回答

3
Sub ReplaceBlanks() 
Dim Lastrow As Integer 
Dim srchRng As Range 

Lastrow = Cells(Rows.Count, 1).End(xlUp).Row 
Set srchRng = Range(Cells(84, 4), Cells(Lastrow, 4)) 

Dim InputValue As String 

If srchRng.Count - WorksheetFunction.CountA(srchRng) > 0 Then 
    InputValue = InputBox("Enter value that will fill empty cells in selection", _ 
          "Fill Empty Cells") 
    srchRng.SpecialCells(xlCellTypeBlanks).Value = InputValue 
End If 
End Sub 

這也增加範圍內的變量,所以你avoid using .Select。它還假定你只需要一個輸入值。如果您希望觸發每個空單元,請將inputValue = ...置於If IsEmpty(cell)循環中。

一種替代你If a cell is empty循環,是一個行修復:

Range(Cells(84,4),Cells(lastRow,4)).SpecialCells(xlCellTypeBlanks).Value = InputValue。這將需要D84:DlastRow中的所有空白,並填寫任何InputValue。無需循環。

+1

這適用,但如果沒有空白它會拋出和錯誤(我看你處理錯誤)。使用總數減去countA即使沒有空白也不會出錯,所以我拿出了錯誤處理(我喜歡儘可能避免錯誤處理)。 – Chrismas007

+1

@ Chrismas007 - 嗯,是的好電話!我更新了代碼。 – BruceWayne

+0

@Robby - 我更新了代碼,刪除了錯誤處理程序,以及額外的(現在未使用的)'Cell'變量。 – BruceWayne

1
Sub ReplaceBlanks() 
Dim Lastrow As Integer 
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

Range("D84:D" & Lastrow).Select 
Dim cell As Range 
Dim InputValue As String 
On Error Resume Next 
For Each cell In Selection 
If IsEmpty(cell) Then 
InputValue = InputBox("Enter value that will fill empty cells in selection", _ 
"Fill Empty Cells") 
cell.Value = InputValue 
End If 
Next 
End Sub 

只是招行到合適的位置:d

+0

但是他一次只能一個盒子。我想他想用一個條目填滿所有的空白。 – Chrismas007

+0

如果是這樣,很容易:添加「如果InputValue =」「然後」InputValue = InputBox(「輸入值將填補選擇空單元格中的值」,_ 「填充空單元格」) – Pierre

1

YourRange.Cells.Count - WorksheetFunction.CountA(YourRange)會給你空格的數量,因此您可以檢查是否有空格:

Sub ReplaceBlanks() 
    Dim Lastrow As Integer 
    Lastrow = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row 'Use 4 as it is the D column you are working with 

    Dim cel As Range 'Use cel as CELL can be confused with functions 
    Dim InputValue As String 
    If Range("D84:D" & Lastrow).Cells.Count - WorksheetFunction.CountA(Range("D84:D" & Lastrow)) > 0 Then 
     InputValue = InputBox("Enter value that will fill empty cells in selection", "Fill Empty Cells") 
     For Each cel In Range("D84:D" & Lastrow) 
      If IsEmpty(cel) Then 
       cel.Value = InputValue 
      End If 
     Next 
    End If 
End Sub 
相關問題