Comment copyr un formulaire de saisie dans un classur nouvellement créé dans VBA

Je me rends count que ce n'était pas clair en raison de la copy d'une partie de la macro. Au-dessous de la macro, qui commence avec la nouvelle WB, une erreur est requirejse pour l'object 424. en mode manuel, ProjectWB et SourceWB sont chargés correctement.

Sub Copy_Form_to_new_WB() ProjectWB = ActiveWorkbook.Name SourceWB = "Interpretation Analysis 2.0.xlsm" SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" ProjectWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" End Sub 

Dans le cas, je diminuer à la fois ProjectWB et SourceWB. Je reçois l'erreur Erreur de compilation: qualification invalide. et le ProjectWB dans la ligne 8 est mis en évidence

 Sub Copy_Form_to_new_WB() Dim SourceWB As Integer Dim ProjectWB As Integer ProjectWB = ActiveWorkbook.Name SourceWB = "Interpretation Analysis 2.0.xlsm" SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" ProjectWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" End Sub 

Qu'est-ce qui ne va pas?


Question originale:

Dans une macro, je crée un nouveau classur qui fonctionne correctement. Maintenant, je souhaite copyr un formulaire de saisie du classur existant vers le nouveau. En vérifiant Internet, j'ai trouvé des morceaux et des pièces. Pour être clair, j'ai copié deux parties de la macro.

 Dim SourceWB As Workbook Dim ProjectWB As Workbook SourceWB = ActiveWorkbook.Name 'now the part to create the new workbook when this is active ProjectWB = ActiveWorkbook.Name SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" DestinationWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" 

Maintenant, je reçois une erreur d'exécution 91 "variable d'object ou avec un bloc non défini", quelle serait la manière correcte de le faire.

Dans la première version de votre code, vous déclarez (en les déclarant non explicitement) à la fois ProjectWB et SourceWB comme Variant/Ssortingng , mais en essayant de les utiliser comme objects du Workbook .

Dans la deuxième version de votre code, vous SourceWB explicitement ProjectWB et SourceWB tant que Integer , mais en essayant d'affecter des valeurs de Ssortingng à celles-ci avant d'essayer de les utiliser comme objects du Workbook .

Selon vos échantillons de code révisés, je crois que vous essayez de le faire:

 Dim SourceWB As Workbook Dim ProjectWB As Workbook 'This line is the only difference to my previous answer Set SourceWB = Workbooks("Interpretation Analysis 2.0.xlsm") Set ProjectWB = ActiveWorkbook 'Actually, here's a second difference - I hadn't noticed the missing space before ' the line continuation character earlier SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export _ "Input_Analysis_Form.frm" DestinationWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" 

Réponse originale:

Vous avez déclaré SourceWB et ProjectWB tant qu'objects du Workbook , mais vous assignez simplement une Ssortingng (le nom de certains classurs).

 Dim SourceWB As Workbook Dim ProjectWB As Workbook Set SourceWB = ActiveWorkbook 'now the part to create the new workbook when this is active 'This doesn't make sense, because it will be the same as "SourceWB" Set ProjectWB = ActiveWorkbook SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" DestinationWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" 

Je me rends count que ce n'était pas clair en raison de la copy d'une partie de la macro. Au-dessous de la macro, qui commence avec la nouvelle WB, une erreur est requirejse pour l'object 424. en mode manuel, ProjectWB et SourceWB sont chargés correctement.

 Sub Copy_Form_to_new_WB() ProjectWB = ActiveWorkbook.Name SourceWB = "Interpretation Analysis 2.0.xlsm" SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" ProjectWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" End Sub 

Dans le cas, je diminuer à la fois ProjectWB et SourceWB. Je reçois l'erreur Erreur de compilation: qualification invalide. et le ProjectWB dans la ligne 8 est mis en évidence

 Sub Copy_Form_to_new_WB() Dim SourceWB As Integer Dim ProjectWB As Integer ProjectWB = ActiveWorkbook.Name SourceWB = "Interpretation Analysis 2.0.xlsm" SourceWB.VBProject.VBComponents("Input_Analysis_Form").Export_ "Input_Analysis_Form.frm" ProjectWB.VBProject.VBComponents.Import "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frm" Kill "Input_Analysis_Form.frx" End Sub 

Qu'est-ce qui ne va pas?