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.
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.).
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.
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