2016-11-23 4 views
1

J'essaie de prendre une liste grossière de données, puis de la copier dans un format organisé pré-formaté. Pour ce faire, j'ai la liste brute configurée pour que chaque élément de la liste soit numéroté dans l'ordre, peu importe s'il y a des espaces entre les éléments. La macro que j'essaie de faire prendra cette liste grossière et la copiera dans le formulaire sans espace. Ours avec moi, j'ai essayé de m'enseigner Visual Basic, donc le code que j'ai peut être ... désordonné. À l'heure actuelle, le problème que j'ai est que je reçois un débordement sur i = i + 1.Vérifiez si une valeur est présente, puis copiez-la dans une autre feuille de calcul

Sub Print_Sheet_Populate() 
' 
' Print_Sheet_Populate Macro 
' Takes Items from Raw Data sheet and puts them in Print Sheet sheet. 
' 

' 
Dim wsS1 As Worksheet 
Dim wsS2 As Worksheet 
Dim ending As Long 
Dim copy() As Long 
Dim i As Long 

Set wsS1 = Sheets("Raw Data") 
Set wsS2 = Sheets("Print Sheet") 

With wsS1.Range("A:A") 'To copy the item numbers in the rough data to an array 
    i = 1 
     Set c = .Find(i, LookIn:=xlValues) 
     If Not c Is Nothing Then 
      ReDim copy(i) 
      copy(i - 1) = c.Value 
      Do 
       i = i + 1 
       ending = i 
      Loop While Not c Is Nothing 
     End If 
End With 

With wsS2.Range("A24:A324") 'To paste the data from the array to the form 
    i = 1 
     If Not i = ending Then 
      Do 
       Worksheets("wsS2").Range("A" & i).Value = copy(i - 1) 
       i = i + 1 
      Loop While Not c Is Nothing 
     End If 
End With 
End Sub 

Répondre

0

Extrait du Range.Find Method (Excel):

Lorsque la recherche atteint la fin de la plage de recherche spécifiée, il s'enroule autour du début de la plage. Pour arrêter une recherche lorsque cette sous-couverture se produit, enregistrez l'adresse de la première cellule trouvée, puis testez chaque adresse de cellule trouvée successivement par rapport à cette adresse enregistrée.

+0

C'est fait, merci EEM! –

+0

Content de t'aider! Avez-vous essayé de remplacer la première première boucle avec une sorte de données, et de remplacer la deuxième boucle par quelque chose comme ça 'Range.resize (ubound (tableau), ubound (array, 2)). Value = Array' pour afficher le tableau entier à la fois? – EEM