web-dev-qa-db-fra.com

Erreur d'exécution Excel VBA '424': objet requis lors de la tentative de copie de zone de texte

J'essaie de copier le contenu d'une zone de texte d'un workbook à un autre. Je n'ai aucun problème à copier les valeurs de cellule de la première workbook à la 2e, mais je reçois une erreur object required lorsque je tente de copier la zone de texte. Cette macro est en cours d’exécution à partir du classeur contenant les données que je veux copier. Utiliser le code Excel 2007:

Sub UploadData()
    Dim xlo As New Excel.Application
    Dim xlw As New Excel.Workbook
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx")
    xlo.Worksheets(1).Cells(2, 1) = Range("d4").Value 'Copy cell content (this works fine)
    xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 'This gives me the object required error
    xlw.Save
    xlw.Close
    Set xlo = Nothing
    Set xlw = Nothing
End Sub

Merci pour toute aide.

5
Sam WB

Le problème avec votre macro est qu’une fois que vous avez ouvert votre destination Workbook (xlw dans votre exemple de code), il est défini comme objet ActiveWorkbook et vous obtenez une erreur car TextBox1 doesn ' t existent dans ce Workbook spécifique. Pour résoudre ce problème, vous pouvez définir un objet de référence sur votre Workbook réel avant d’ouvrir l’autre.

Sub UploadData()
    Dim xlo As New Excel.Application
    Dim xlw As New Excel.Workbook
    Dim myWb as Excel.Workbook

    Set myWb = ActiveWorkbook
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx")
    xlo.Worksheets(1).Cells(2, 1) = myWb.ActiveSheet.Range("d4").Value
    xlo.Worksheets(1).Cells(2, 2) = myWb.ActiveSheet.TextBox1.Text

    xlw.Save
    xlw.Close
    Set xlo = Nothing
    Set xlw = Nothing
End Sub

Si vous préférez, vous pouvez également utiliser myWb.Activate pour rétablir votre actif Workbook comme actif. Cela fonctionnera également si vous le faites avec un objet Worksheet. L’utilisation de l’un ou l’autre dépend principalement de ce que vous voulez faire (s’il ya plusieurs feuilles, etc.).

4
dnLL

Je pense que la raison en est peut-être que TextBox1 concerne le module VBA et la feuille qui lui est associée, tandis que Range porte sur la "Feuille active".

MODIFIER

Il semble que vous puissiez utiliser la fonction GetObject pour extraire le champ de texte du classeur.

1
Seth Moore

Le problème est avec cette ligne

 xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text

Vous avez la zone de texte définie à un autre emplacement que vous n'utilisez pas ici. Excel ne parvient pas à trouver l'objet zone de texte dans la feuille en cours lorsque cette zone de texte a été définie dans xlw.

Donc remplacez ceci par 

 xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text 
0
kunal