Well, Crystal (unlike MS Word) doesn't have a built-in repeat label feature. Instead it presents each record in the report's dataset as an individual label. And since the number of labels you want is very dynamic you really only have one choice that I can see, and that is to return a dataset to Crystal that contains as many records as there are labels to print.
You have a couple of ways you could use to accomplish this task. First, if your database supports stored procedures, I would suggest writing a stored procedure that: 1) Takes a parameter from the user indicating how many copies to print; 2) Gets the one record containing all the info for the label; 3) Inserts that record x times (based on the parameter value) into a temp table; and 4) return the contents of the temp table as a recordset (select * from temptable). Using such a stored proc as your datasource would address your issue.
If a stored proc is not an answer for you, you could use the Crystal Data Object as the report's datasource. If you haven't used the CDO before, it is essentially an array in VB that is passed to a Crystal report at runtime, with the array containing the data for the report. You initially build the report either using an ADO connection or a ttx file as the source (in other words, the Active Data driver), and then at runtime you pass the CDO to the report. If you want to see a very simple sample of how the CDO works click on the following link and download the CDO Tutorial.
In your case, you'd populate the CDO array in VB with as many rows worth of lable info as indicated by the user. Then, you'd pass the CDO to the report. Instant labels.
Let me know if you find either of those approaches useful.