2010-02-04 6 views
17

J'ai un petit script dans Excel/VB que j'essaie de faire fonctionner. Tout ce que je veux faire est de sélectionner une plage dynamique de données à copier mais je n'arrive pas à trouver d'aide/code sur la façon d'obtenir les données de la grille (comme A11).Récupérer la cellule actuelle dans Excel VB

Voici le code que j'ai de l'enregistrement de macro qui sélectionne la plage de données:

Range("D291:D380").Select 

J'espérais que je pouvais faire Range(Current).Select ou quelque chose, mais cela ne fonctionne pas.

Toute aide est appréciée.

+1

App.ActiveCell;) –

Répondre

20

Avez-vous essayé:

Pour une cellule:

ActiveCell.Select 

Pour plusieurs cellules sélectionnées:

Selection.Range 

Par exemple:

Dim rng As Range 
Set rng = Range(Selection.Address) 
+2

je pense " Acte iveCell.Address "fonctionnera. J'ai un MsgBox qui affiche les données variables que j'essaie d'obtenir. –

+0

@Apps J'ai ajouté un peu plus. Vérifiez-le. –

+0

Pour développer cette réponse, une fois que vous avez défini 'rng', vous pouvez obtenir' rng.Cells.Column' et 'rng.Cells.Row'. Pour développer 'ActiveCell.Address', si vous' Dim s as String: s = ActiveCell.Address', il retournera (par exemple) "$ E $ 3". – Barniferous

2

Si vous essayez saisir une gamme avec une dynami ment généré chaîne, il vous suffit de construire la chaîne comme ceci:

Range(firstcol & firstrow & ":" & secondcol & secondrow).Select 
+0

App.ActiveCell. –

2

Cela peut ne pas aider à répondre à votre question directement, mais est quelque chose que j'ai trouvé utile lorsque vous essayez de travailler avec des gammes dynamiques qui peuvent vous aider.

On suppose que dans votre feuille de calcul, vous avez les numéros 100 à 108 dans les cellules A1: C3:

  A B C 
1  100 101 102 
2  103 104 105 
3  106 107 108 

ensuite pour sélectionner toutes les cellules que vous pouvez utiliser la propriété CurrentRegion:

Sub SelectRange() 
Dim dynamicRange As Range 

Set dynamicRange = Range("A1").CurrentRegion 

End Sub 

L'avantage de ceci est que si vous ajoutez de nouvelles lignes ou colonnes à votre bloc de nombres (par exemple 109, 110, 111) alors CurrentRegion référencera toujours la gamme agrandie (dans ce cas A1: C4).

J'ai beaucoup utilisé CurrentRegion dans mon code VBA et je trouve qu'il est très utile lorsque vous travaillez avec des plages de taille dynmaciale. En outre, il évite d'avoir des gammes de codes durs dans votre code. Pour finir, dans mon code, vous verrez que j'ai utilisé A1 comme cellule de référence pour CurrentRegion. Cela fonctionnera aussi quelle que soit la cellule que vous référencez (essayez: remplacer A1 par B2 par exemple). La raison en est que CurrentRegion sélectionne toutes les cellules contiguës en fonction de la cellule de référence.

2

Le mot-clé « Sélection » est déjà un objet Range vba afin que vous puissiez l'utiliser directement, et vous ne devez pas sélectionner des cellules à copier, par exemple, vous pouvez être sur Sheet1 et exécutez les commandes:

ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy 
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste 

Si elle est une sélection multiple, vous devez utiliser l'objet zone dans une boucle:

Dim a as Range 
For Each a in ActiveSheet.Selection.Areas 
    a.Copy 
    ThisWorkbook.worksheets("sheet2").Range("A1").Paste 
Next 

Cordialement

Thomas

+0

Devrait être 'Dim a As Range' – barrowc

+0

Corrigé merci! – Thomas

1

Essayez cette

Dim app As Excel.Application = Nothing 
Dim Active_Cell As Excel.Range = Nothing 

Try 
      app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application) 
Active_Cell = app.ActiveCell 

Catch ex As Exception 
      MsgBox(ex.Message) 
      Exit Sub 
     End Try 

'    .address will return the cell reference :) 
0

Je sais que cela ne concerne pas directement le titre de la question, mais certaines façons de faire face à une plage variable pourrait être pour sélectionner la plage chaque fois que le code est exécuté - en particulier si vous êtes intéressé par une gamme sélectionnée par l'utilisateur. Si vous êtes intéressé par cette option, vous pouvez utiliser Application.InputBox (page de documentation officielle here). L'une des variables optionnelles est 'type'. Si le type est défini sur 8, InputBox dispose également d'une option de sélection de plage de style Excel. Un exemple de la façon de l'utiliser dans le code serait:

Dim rng as Range 
Set rng = Application.InputBox(Prompt:= "Please select a range", Type:=8) 

Note:

Si vous attribuez la valeur InputBox à une variable aucune portée (sans le mot-clé Set), au lieu des gammes , les valeurs des gammes seront affectés, comme dans le code ci-dessous (bien que la sélection de plusieurs plages dans cette situation peut exiger que les valeurs à attribuer à une variante):

Dim str as String 
str = Application.InputBox(Prompt:= "Please select a range", Type:=8) 
Questions connexes