2016-11-16 6 views
2

印刷できる枚数を入力ボックスに入力して、入力可能な最大数を入力する必要があります。Excelの入力ボックス最大数で印刷するコピー数

私は以下のコードを持っていますが、動作しますが、私は「1」以上のものを入力した場合、それは
If NumberOfCopies >= "11" Thenをトリガし、私はキャンセルボタンをクリックした場合、それはまた同じことをして数字を置く

'ASKS HOW MANY COPIES TO PRINT 
PRINTS: 
Dim NumberOfCopies As String 
NumberOfCopies = Application.InputBox("How many copies do you want to print? Must enter 0-10", Type:=2) 

If NumberOfCopies >= "11" Then 
MsgBox "Max to print is 10 copies" 
GoTo PRINTS 
End If 

If NumberOfCopies = "0" Or NumberOfCopies = "" Then 
'do not print 
Else 
ActiveSheet.PrintOut Copies:=NumberOfCopies 
End If 
+1

CINT(NumberOfCopies)> = 11 –

+0

私はそれをあなたがそれを持っている方法を実行すると、それが正しく評価されます。入力ボックスに1を入力すると、if文の後に "1" <"11"と表示されます。 – Rdster

答えて

2

はまだキャンセル打つユーザーをテストする必要があります...キャンセル押す、または0を入力し、1とき、これは私のために働きました、または11

Prints: 
Dim NumberOfCopies As String 
NumberOfCopies = Application.InputBox("How many copies do you want to print? Must enter 0-10", Type:=2) 

If NumberOfCopies = "False" Or NumberOfCopies = "0" Then 
    'If user hits Cancel, NumberofCopies will be "False" 
Else 
    If NumberOfCopies >= "11" Then 
    MsgBox "Max to print is 10 copies" 
    GoTo Prints 
    Else 
    ActiveSheet.PrintOut Copies:=NumberOfCopies 
    End If 
End If 
+1

私は 'の場合NumberOfCopies> = "11" Then' 上の引用符を削除し、「= = "0" Then' もし'へNumberOfCopies = "偽" またはNumberOfCopies NumberOfCopies = "偽" またはNumberOfCopies場合 'たまたま0 "またはNumberOfCopies =" "したがって、入力ボックスが空のときにユーザーが[OK]をクリックすると、0を入力するのと同じことが実行され、感謝の気持ちを表しています。 – luke

2

をトリガします引用符はそれらを文字列に変換します。あなたが入力したユーザ数たいので、次の変更を行う必要があります。

Dim NumberOfCopies As Int 
NumberOfCopies = Application.InputBox("How many copies do you want to print Must enter 0-10", Type:=1) 

If NumberofCopies >= 11 Then 
... 

If NumberOfCopies = 0 or NumberOfCopies = "" Then 
... 
1

Type:=2は実際にはテキストタイプです。数字で作業しているので、Type:=1と設定する必要があります。これにより、ユーザーが数字でないものを入力すると、自動的に「Number is not valid」というメッセージがポップアップします(それに必要なスクリプト作業は必要ありません)。

できるだけ、位置ラベルを使用しないでください。あなたのコードはDo...Whileループで簡単にスクリプト化できます。

すでに指摘したように、数字を使って作業するときは、二重引用符で囲んだものを使用しないでください。そうしないと、VBAは文字列として扱います。

@Rdsterは、ユーザーが「キャンセル」ボタンを押したときに良いポイントをもたらしました。それが起こると、あなたの変数の値は "False"(String)になりますので、それを探す必要があります。私はあなたのコードは次のようにより良い仕事と考えていることが言われているすべての、と

'ASKS HOW MANY COPIES TO PRINT 
Dim NumberOfCopies As String 
Do 
    NumberOfCopies = Application.InputBox("How many copies do you want to print? Must enter 0-10", Type:=1) 
    If NumberOfCopies = "False" Then Exit Sub ' If user clicks on Cancel button 
    If NumberOfCopies > 10 Then 
     MsgBox "Max to print is 10 copies" 
    End If 
Loop While NumberOfCopies > 10 'although producing the same result, it is cleaner to compare with 10, than to >=11 

'Avoid leaving blank conditions. Work with what you have. 
'Everything that doesn't match your conditions will be skipped anyways. 
If NumberOfCopies > 0 And NumberOfCopies < 10 Then 
    ActiveSheet.PrintOut copies:=NumberOfCopies 
End If 
関連する問題