2017-02-11 5 views
0
liaison tardive

essayant de créer dynamiquement des plages en utilisant ceci:Dynamiquement Créer Range VBA

ws.Range(Cells(1, 1), Cells(q + 1, z + 1)).Value2 = xaRR 

cela fonctionne dans Excel comme un charme vba, mais l'accès ne cesse de me donner question. Il n'aime pas la partie des cellules. La chose est ennuyeux ceci ne me donne pas d'histoires

ws.Cells(1,1).Value = blah blah blah 

Quand j'essaie ceci:

 Dim oXL As Object: Dim wb As Object: Dim ws As Object: Dim rNg As Object: Dim cl As Object 
     Set wb = .Workbooks.Add 
     Set ws = wb.Sheets 
     Set rNg = ws.Range 
     Set cl = rNg.Cells 
     ws.rNg(cl(1, 1), cl(q + 1, z + 1)).Value2 = xaRR 

il est dit que RNG ne marche pas en charge cette propriété ou méthode.

Quelqu'un peut-il m'aider à voir le problème évident?

+0

Avez-vous besoin d'utiliser une liaison tardive? – Comintern

+0

@Comintern Oui. En raison de l'environnement, je ne peux pas utiliser des références de bibliothèque Excel spécifiques. La liaison tardive est une exigence malheureusement. –

+0

Dans Access, qualifiez l'appel '' Cells' avec 'ws.' – ThunderFrame

Répondre

3

Votre ligne d'origine utilise une référence implicite à la feuille active. Dans Excel, cela fonctionne (mais c'est un bug si vous ne voulez pas utiliser la feuille active), mais dans Access ce sera une erreur. Qualifiez les cellules appellent à la référence de la feuille, pour un appel explicite:

Je suppose que ws est un objet Worksheet et non un objet Worksheets

ws.Range(ws.Cells(1, 1), ws.Cells(q + 1, z + 1)).Value2 = xaRR 

Ou dans votre deuxième exemple:

J'ai supprimé la variable Cells, et j'ai également substitué les séparateurs d'instruction : Dim pour les virgules. Les séparateurs d'instruction sont mauvais.

Votre variable ws est toutes les feuilles, donc je viens de saisir le premier, mais votre implémentation peut avoir besoin de varier.

Dim oXL As Object, wb As Object, ws As Object 
Set wb = .Workbooks.Add 
Set ws = wb.Sheets(1) 
ws.Range(ws.Cells(1, 1), ws.Cells(q + 1, z + 1)).Value2 = xaRR 
+0

apparemment défini rNg = ws.Range n'est pas non plus une méthode ou une propriété supportée. Je vais continuer à essayer des choses jusqu'à ce que je le découvre. –

+1

voir ma modification, vous devez définir 'ws' sur une feuille * simple *, avec' Set ws = wb.Sheets (1) 'au lieu de' Set ws = wb.Sheets' – ThunderFrame

+0

Ah. Je devais le faire et prendre la référence de rNg et cela a fonctionné comme une chamr. merci –