2016-05-20 3 views
0

Ainsi, une erreur inattendue a commencé à se produire lorsque je cours mon VBA. Il s'agit d'ouvrir plusieurs fichiers Excel et de brancher leurs valeurs dans un fichier Excel principal où il fait ensuite plein de choses.VBA se bloque en essayant de .Close mais seulement sur la deuxième exécution

Cela fonctionnait bien jusqu'à ce que je me rende compte qu'il se bloque chaque fois que l'utilisateur importe les données plus d'une fois alors que le fichier est ouvert. (Cela fonctionne donc parfaitement s'il s'exécute la première fois, ou si vous quittez, exécutez-le encore une fois, mais si vous l'exécutez plus d'une fois sans le quitter, il se fige)

Après avoir utilisé la méthode d'étape, j'ai trouvé le code se fige et c'est quand il essaie de fermer un classeur Excel particulier. Il ne gèle pas sur les autres pour une raison quelconque, et il ne gèle sur celui-ci si vous exécutez le code d'importation plus d'une fois par session. Des idées pour lesquelles cela pourrait être fait?

Voici un exemple d'importation qui fonctionne correctement, puis, en dessous, c'est celle sur laquelle elle se fige. Je ne peux que supposer que cela a quelque chose à voir avec la méthode copier-coller, mais avec la façon dont le deuxième fichier est formaté, c'est la seule façon de savoir comment récupérer les valeurs sans une importation complexe.


If CbxImport108.Value = True Then 

    108.Rows("2:100000").Delete 
    'open and transfer 108--------------------------- 
    Workbooks.Open 108Combination 
    ActiveSheet.Unprotect 
    Set CurrentBook = Workbooks(ActiveWorkbook.Name) 

    If tbx108T.Value = "" Then 
     Set CurrentPage = CurrentBook.Sheets(ActiveSheet.Name) 
    Else 
     Set CurrentPage = CurrentBook.Sheets(tbx108T.Value) 
    End If 


    'transfer the data 
    TranCounter = 1 
    Do While TranCounter < 100 Or CurrentPage.Range("A" + TranCounter).Value <> "" 

     TranCounter = TranCounter + 1 
    Loop 
    Finalcounter = TranCounter 

    108.Range("A1:AZ" + Finalcounter).Value = CurrentPage.Range("A1:AZ" + Finalcounter).Value 

    CurrentBook.Close 
End If 


If cbxHS.Value = True Then 

    HS.Rows("1:100000").Delete 
    'open and transfer HS-------------------------------------- 
    Workbooks.Open HSCombination 
    ActiveSheet.Unprotect 
    Set CurrentBook = Workbooks(ActiveWorkbook.Name) 

    If tbxHST.Value = "" Then 
     Set CurrentPage = CurrentBook.Sheets(ActiveSheet.Name) 
    Else 
     Set CurrentPage = CurrentBook.Sheets(tbxHST.Value) 
    End If 


    'transfer the data 
    TranCounter = 1 
    Do While TranCounter < 100 Or CurrentPage.Range("A" + TranCounter).Value <> "" 

     TranCounter = TranCounter + 1 
    Loop 
    Finalcounter = TranCounter 

    CurrentPage.Range("A1:Z" + Finalcounter).NumberFormat = "@" 

    Application.CutCopyMode = False 
    CurrentPage.Range("A1:AA" + Finalcounter).Copy 
    HS.Range("A1:AA" + Finalcounter).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
    xlNone, SkipBlanks:=False, Transpose:=False 

    CurrentBook.Close 

End If 

EDIT: Je ne l'ai pas l'intention des gens d'exécuter ce code droite, le seul point était de regarder la comparaison d'un exemple d'une importation d'un fichier qui ne gèle jamais et celui qui gèle. Les déclarations ne sont pas incluses. Désolé pour toutes les confusions.

+0

Pouvez-vous envoyer un exemple de travail effectif? L'extrait que vous avez fourni comporte des erreurs de syntaxe et est hors contexte d'une procédure particulière. 108. [quelque chose] n'est pas un nom de variable valide, je ne suis pas sûr de savoir comment l'exécuter, car c'est une erreur de syntaxe de ma part. –

Répondre

0

Peut être en utilisant la currentpage en référence cellulaire est à l'origine de la redirection des différents fichiers Excel lorsque vous exécutez la deuxième fois

0

Je compris comment résoudre le petit problème, même si je ne comprends toujours pas/pourquoi/il faisait ceci ou pourquoi cela a fonctionné: Après qu'il a fini de copier et coller, mais avant qu'on lui dise de fermer le livre, j'ai ajouté dans "Application.CutCopyMode = True" et le gel s'est arrêté. J'ai pu exécuter le code d'importation plus de 5 fois de suite maintenant sans problèmes. Ceci explique pourquoi il a continué de planter sur ce classeur et aucun des autres.

Merci pour l'aide à tous!


Application.CutCopyMode = False 
    CurrentPage.Range("A1:AA" + Finalcounter).Copy 
    Haystack.Range("A1:AA" + Finalcounter).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
    xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = True 
    CurrentBook.Close