Pourquoi ce qui suit ne fonctionne pas: p>
(je me rends compte que je pouvais juste faire J'ai lu l'entrée MSDN et indique que le premier argument doit être totalement confus. p> plage (cellules (1,1)). Valeur = 3 code> p>
cellules (1,1) code> devrait essentiellement être la même chose que d'utiliser A1 code> droite? p>
cellules (1,1) .value = 3 code>, mais je suis juste curieux de savoir pourquoi cela ne fonctionne pas.) em> p>
a1 code> style, pourtant quelque chose comme ça fonctionne: P>
plage (cellules (1,1), cellules (2,3)). Valeur = 2 code> P>
7 Réponses :
Lorsque vous souhaitez utiliser la propriété des cellules pour spécifier les paramètres de l'objet de la plage (si je me souviens bien - je n'utilise pas VBA depuis un certain temps), vous devez alors fournir deux arguments.
Donc, si vous souhaitez faire référence à un objet de plage qui n'a qu'une cellule, vous devez écrire: P>
Range(Cells(1, 1), Cells(1, 1)).value = "Hello World"
C'est juste déroutant parce qu'il contredit leur propre documentation, à la distance que je puisse Tel (dit que vous devez utiliser un style A1 comme premier argument). Je suppose que c'est juste une de ces décisions de conception étranges que vous devez vivre.
Pas exactement, si vous faites défiler la documentation, vous verrez que vous utilisez différentes conditions si vous utilisez la propriété des cellules ... dans cette section, il ne mentionne pas le style A1 (évidemment tel qu'il est concerné par la propriété des cellules) .
msdn.microsoft.com/en-us/library/Office/ff836512. ASPX est l'endroit où elle spécifie la première exigence d'argument. Je suis nouveau à VBA, alors je regarde la mauvaise entrée?
msdn.microsoft.com/en-us / Bibliothèque / Bureau / ... pourrait être plus utile, il explique à propos de l'utilisation de la propriété des cellules dans un objet de plage.
Cellules (1,1) = "Hello World" 'fonctionne le même code plus court
@WoodyPride Cette page de documentation est incomplète au mieux, trompeuse au pire, car elle le fait vraiment ressembler à une plage (cellules (1,1)). Valeur = 3 code> devrait fonctionner, mais cela ne semble pas à. Il n'existe aucun exemples dans la documentation officielle que je puisse trouver qui discute de l'utilisation de la propriété des cellules à l'intérieur d'un objet de plage pour définir une plage de cellules unique contre une plage multi-cellule et, en son absence, chaque exemple semble impliquer qu'il fonctionne.
Lorsque plage code> est utilisé avec un seul paramètre, le paramètre est interprété comme nom de plage. Range(Cells(1,1).Value)
Bon, mais pourrait-il être plus complet avec les cellules (1,1) exemple?
Plage (cellules (1,1) .Value) jette une erreur sur ma machine. Gamme (cellules (1,1) .Address) fonctionne cependant.
@ user3032689 'cellules (1,1) .Value' renvoie la valeur dans la cellule. (Si cette valeur de cellule n'est pas une adresse de style A1, la plage (cellules (1,1) .Value) 'lancera une erreur). Sinon, les cellules (1,1) .Address renversent la chaîne "$ A $ 1" qui est une adresse de style A1 valide pour la plage.
Lorsque vous utilisez des "cellules", il est nécessaire de formuler Object.cells, par exemple. Application.cells (2,2) ou ActiveWorksheet.cells P>
au lieu de faire référence à une seule cellule comme ceci:
Range(Cells(1,1).Address)
Pour une seule cellule, c'est beaucoup plus facile: utilisez la fonction de cellules par défaut ():
Range(Cells(1,1), Cells(1,1)) = "hello world" Range(Cells(2,2), Cells(3,4)) = "you cannot square around, but you can round a square" Sheets(1).Cells(5,5) = "=Round(Sqrt(5))"
J'écris cette réponse parce que j'apprends que j'apprends VBA et cela m'a pris la meilleure partie de trois jours pour comprendre ce qui se passait ici et la documentation officielle ne discute pas du tout. Cette QA est bonne mais l'information est un peu dispersée, de mon point de vue aujourd'hui. P>
Voici ce que je connais à l'aide de la propriété Cellules () à l'intérieur d'un objet de plage () pour faire référence à une plage à cellule unique. Ce que j'ai besoin de faire tout le temps! P>
donné un objet WS valide ... p>
Ce n'est pas le cas. Vous obtiendrez une erreur d'exécution '1004': méthode 'gamme' de l'objet'_worksheet 'a échoué. P>
La solution évidente, forte> comme décrit par @woody_Pride est la suivante: p>
Malheureusement, devoir le faire est absolument induisant et n'est pas réellement strictement nécessaire. P>
Ce que vous avez réellement besoin est strong>, comme affirmé par @Willby, bien que l'explication sur laquelle c'est le cas est en réalité dans la réponse de @chris_neilsen: p>
Cela fonctionnera également strong>, comme suggéré par @pashute (qui a tort dans la plupart des parties de son explication): P>
ws.range (ws.cells (i, j)) code> p>
ws.range (ws.cells (i, j), ws.cells (i, j)) code> p>
ws.range (ws.cells (i, j) .address) code> p>
ws.cells (i, j) code> p>
ws.range (cellules (i, j) .Address) code> est un moyen vraiment mauvais de référencer une seule cellule - il a une référence implicite intégrée à la feuille active qui sera erronée si ws < / code> n'est pas actif. Et ws.cells (i, j) code> fait déjà référence à la plage requise, de sorte que tout est inutile
@chrisneilsen j'ai édité pour mettre à jour ws.range (cellules (i, j) .Address) code> à ws.range (ws.cells (i, j) .Address) code>. .. Merci pour le rappel. Sur ws.cells (i, j), j'essaie simplement de déterminer comment faire référence à une seule cellule et j'ai continué à obtenir des erreurs lorsque j'ai essayé d'écrire ws.range (ws.cells (i, j)) et je ne pouvait pas comprendre pourquoi, puisque la documentation semble indiquer que cela devrait fonctionner.
Quant à Qui a fourni une explication mais aucune réponse i> l'OP a demandé à Pourquoi ce qui suit ne fonctionne pas i> ce que j'ai répondu. L'OP a également dit qu'ils savaient comment le faire correctement, donc pas besoin de répéter que
Par exemple, je veux juste pouvoir copier un enregistrement d'un endroit à un autre; wsdestination.range ("A1") = wssource.range ("A1") code> fonctionne, mais je veux utiliser une variable dans la référence de cellule. La documentation indique que vous pouvez utiliser une référence de cellules (i, j) code> de style pour remplacer une référence de style R1C1, mais dans ce contexte, vous ne pouvez pas.
Vraiment, ne faites pas cette double référence double - il suffit d'utiliser ws.cells (...).
Explication par rapport à la réponse, point équitable - Je faisais projeter mes propres désirs de cette QA sur l'adresseur d'origine. J'ai édité ça de ma réponse.
Vous suggère de demander à un Q avec tous les détails de ce que vous voulez, ce que vous avez essayé, comment cela a échoué. I Gaureree Vous obtiendrez une réponse qui ne nécessite pas de portée (cellules (...). Adresse)
@chrisneilsen Vraiment, ne faites pas cette double référence double - il suffit d'utiliser ws.cells (...). I> Cet échange a été très utile, merci !!
Je sais parfois que vous avez besoin d'une plage pour d'autres propriétés autres que la valeur. Ce que je ferais, c'est faire une fonction pour vous aider:
Set ws = ActiveWorkbook.Sheets("Sheet1")
cellRange(ws, 1, 3).Interior.Color = cellRange(ws, 1, 8).Interior.Color