2016-01-22 67 views
1

我寫了彈出輸入框然後打印範圍的vba代碼。如果用戶按下「取消」按鈕,我想停止代碼。到目前爲止,無論用戶採取什麼行動,它都會打印出來,並浪費大量紙張。下面是代碼:如何在用戶取消輸入框後停止vba

Sub Form() 
ThisWorkbook.Sheets("FAQs").Activate 
ActiveSheet.Range("A1048306").Select 
ActiveCell.FormulaR1C1 = InputBox("SrNo1") 
ThisWorkbook.Sheets("FAQs").Activate 
ActiveSheet.Range("B1048306").Select 
ActiveCell.FormulaR1C1 = InputBox("SrNo2") 
ThisWorkbook.Sheets("FAQs").Activate 
ActiveSheet.Range("C1048306").Select 
ActiveCell.FormulaR1C1 = InputBox("SrNo3") 
ThisWorkbook.Sheets("FAQs").Activate 
ActiveSheet.Range("D1048306").Select 
ActiveCell.FormulaR1C1 = InputBox("SrNo4") 
ThisWorkbook.Sheets("FAQs").Activate 
ActiveSheet.Range("E1048306").Select 
ActiveCell.FormulaR1C1 = InputBox("SrNo5") 
Columns("A:D").EntireColumn.Hidden = False 
Range("A1048308:B1048359").PrintOut 
Columns("A:D").EntireColumn.Hidden = True 
ActiveSheet.Range("A1").Select 
ThisWorkbook.Sheets("Spends Tracker").Activate 
ActiveSheet.Range("A1").Select 
End Sub 

編輯:

這是我的新代碼不更新單元A1048306但仍與VBA和更新細胞繼續B1048306,C1048306,D1048306,E1048306並打印範圍。

Sub Form() 
Dim strVale As String 

Dim ws As Excel.Worksheet 
Set ws = ActiveWorkbook.Sheets("FAQs") 

strVale = InputBox("SrNo1") 
If strVale = vbNullString Then 
    MsgBox ("User canceled!") 
    ThisWorkbook.Sheets("Spends Tracker").Activate 
    ActiveSheet.Range("A1").Select 
    Exit Sub 
Else 
    'Here we can use the objects range to set the formula. 
    ws.Range("A1048306").FormulaR1C1 = strValue 
End If 

ws.Range("B1048306").FormulaR1C1 = InputBox("SrNo2") 
ws.Range("C1048306").FormulaR1C1 = InputBox("SrNo3") 
ws.Range("D1048306").FormulaR1C1 = InputBox("SrNo4") 
ws.Range("E1048306").FormulaR1C1 = InputBox("SrNo5") 
ws.Columns("A:D").EntireColumn.Hidden = False 
ws.Range("A1048308:B1048359").PrintOut 
ws.Columns("A:D").EntireColumn.Hidden = True 
ActiveSheet.Range("A1").Select 
ThisWorkbook.Sheets("Spends Tracker").Activate 
ActiveSheet.Range("A1").Select 

結束子

回答

1

評估返回值,而不是將其放入單元格公式。

變化

ActiveCell.FormulaR1C1 = InputBox("SrNo1") 

到這樣的事情

Dim strVale as string 
strVale = InputBox("SrNo1") 

If strVale = vbNullString Then 
    MsgBox ("User canceled!") 
    Exit Sub 
Else 
    ActiveCell.FormulaR1C1 = strValue 
End If 

應用此每個的InputBox。

編輯:關於第二個問題

我改變你的代碼位。試一試。

選擇和激活會導致事情變得混亂。看這裏。 How to avoid using Select in Excel VBA macros

最好避免它們。

我拿出所有ThisWorkbook.Sheets("FAQs").Activate併爲表單聲明瞭一個對象。然後你可以使用這個對象。

Option Explicit 

Sub Form() 
    Dim strValue As String 

    'Here we are declaring and setting the object = to your FAQs worksheet 
    Dim ws As Excel.Worksheet 
    Set ws = ActiveWorkbook.Sheets("FAQs") 

    strValue = InputBox("SrNo1") 
    If strValue = vbNullString Then 
     MsgBox ("User canceled!") 
     ThisWorkbook.Sheets("Spends Tracker").Activate 
     ActiveSheet.Range("A1").Select 
     Exit Sub 
    Else 
     'Here we can use the objects range to set the formula. 
     ws.Range("A1048306").FormulaR1C1 = strValue 
    End If 

    ActiveSheet.Range("B1048306").Select 
    ActiveCell.FormulaR1C1 = InputBox("SrNo2") 
    ActiveSheet.Range("C1048306").Select 
    ActiveCell.FormulaR1C1 = InputBox("SrNo3") 
    ActiveSheet.Range("D1048306").Select 
    ActiveCell.FormulaR1C1 = InputBox("SrNo4") 
    ActiveSheet.Range("E1048306").Select 
    ActiveCell.FormulaR1C1 = InputBox("SrNo5") 
    Columns("A:D").EntireColumn.Hidden = False 
    Range("A1048308:B1048359").PrintOut 
    Columns("A:D").EntireColumn.Hidden = True 
    ActiveSheet.Range("A1").Select 
    ThisWorkbook.Sheets("Spends Tracker").Activate 
    ActiveSheet.Range("A1").Select 
End Sub 

主要的變化是

ActiveCell.FormulaR1C1 = strValue 

成爲

ws.Range("A1048306").FormulaR1C1 = strValue 

這樣,你就不必擔心活動或所選單元格是什麼。

+0

非常感謝! – user1778266

+0

很高興幫助。繼續學習,讓SO社區知道什麼時候需要指導。 – MatthewD

+0

嗨馬修,我還有一個問題。我玩了一下代碼。現在發生的情況是,如果用戶在第一個框中輸入任何值,則它將進入下一個框,而不更新單元格「A1048306」。 – user1778266

0

這裏是你的代碼,收緊。我建議您閱讀avoiding using .Select,這在可讀性和速度方面有很大幫助。

Sub Form() 
Dim srOkCancel$ 
Dim i& 

With ThisWorkbook.Sheets("FAQs") 
    For i = 1 To 5 
     srOkCancel = InputBox("SrNo" & i, vbOKCancel) 
     If srOkCancel = vbNullString Then Exit Sub 
     .Range(.Cells(1048306, .Columns(i)), .Cells(1048306, .Columns(i))).FormulaR1C1 = srOkCancel 
    Next i 

    .Columns("A:D").EntireColumn.Hidden = False 
    .Range("A1048308:B1048359").PrintOut 
    .Columns("A:D").EntireColumn.Hidden = True 
    .Range("A1").Select 
End With 

ThisWorkbook.Sheets("Spends Tracker").Range("A1").Select 

End Sub 

唯一的問題是,我不知道你在期待什麼作爲輸入 - 它會是一個公式嗎?如果您使用「= r1c1 + 1」作爲輸入字符串,這將不會真正起作用。請讓我知道你希望輸入什麼樣的數據,我會解決它。

相關問題