2016-01-22 127 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”作为输入字符串,这将不会真正起作用。请让我知道你希望输入什么样的数据,我会解决它。

相关问题