2017-09-15 12 views
0

J'ai un problème plutôt intéressant en cours dans mon problème Excel. Fondamentalement, j'ai deux Workbooks, laisse direVBA Envoyer/tirer des données à partir de cahier externe - question intéressante

ACTIVE .xlsm et EXTERNE .xls

actif a une macro qui ouvre externe et tombe dans certaines données de actif, puis lit une solution sur externe et le renvoie à l'utilisateur sur le classeur actif. Ouf. C'est un dur. Maintenant que nous sommes à travers cela, voici le problème. Il est mon opinion personnelle qu'il ya un pépin dans externe (que je suis incapable de fixer comme un fichier de la société en lecture seule) que lorsque actif baisse dans ses données dans une liste déroulante spécifique (validation des données) cellule (d'autres cellules de validation de données fonctionnent bien avec cette macro, c'est seulement celle qui ne le fait pas), la cellule de solution externe ne met pas à jour, mais saute plutôt à "# N/A". À ce stade, mon VBA a rencontré un bug, et le code s'arrête avec externe toujours ouvert. Quand je regarde externe, j'ai déduit que cette cellule variable singulière est le problème amdist toutes les autres cellules variables déterminant la solution. La cellule variable à ce stade contient le nombre "150" et bien que la validation de données permette cette option, la cellule de solution dit toujours "# N/A". Ce n'est que lorsque je clique physiquement à l'intérieur de la cellule avec "150" comme je vais l'éditer, puis j'appuie sur enter, que le # N/A corrige la solution appropriée (Disons que cette solution est "$ 352.08") Gardez à l'esprit que la valeur dans la cellule variable n'a jamais changé, elle était peut-être seulement "rafraîchie".

Des idées sur les raisons pour lesquelles cela se produit? Je sais que c'est long, mais je suppose que c'est la raison pour laquelle je n'ai pas trouvé de solution jusqu'à maintenant. Peut-être qu'il existe une solution de contournement VBA qui peut simuler cliquant dans la cellule, puis en appuyant sur Entrée, qui sait!

Merci d'avance!

Voici un code pour les funsies, bien que je ne crois pas que ce soit un problème de code, car cela fonctionne pour tous les autres "external" avec lesquels j'ai travaillé.

...ElseIf Left(Range("C9").Value, 4) = "LA23" Then 

CurWkbk = ActiveWorkbook.Name 

PartNo = Worksheets("LINAK ONE").Range("C6").Value 
PartNoID_B = Worksheets("GPL Pull").Range("B8").Value 
PartNoID_C = Worksheets("GPL Pull").Range("C8").Value 
PartNoID_D = Worksheets("GPL Pull").Range("D8").Value 
PartNoID_E = Worksheets("GPL Pull").Range("E8").Value 
PartNoID_F = Worksheets("GPL Pull").Range("F8").Value 
PartNoID_G = Worksheets("GPL Pull").Range("G8").Value 
PartNoID_H = Worksheets("GPL Pull").Range("H8").Value 
PartNoID_I = Worksheets("GPL Pull").Range("I8").Value 
PartNoID_J = Worksheets("GPL Pull").Range("J8").Value 
PartNoID_K = Worksheets("GPL Pull").Range("K8").Value 

Workbooks.Open ("EXTERNAL.xls") 
Workbooks("EXTERNAL.xls").Sheets("Price").Activate 
Range("E9").Value = PartNoID_B 
Range("G9").Value = PartNoID_C 
Range("I9").Value = PartNoID_D 
Range("K9").Value = PartNoID_E 
Range("M9").Value = PartNoID_F 
Range("O9").Value = PartNoID_G 
Range("Q9").Value = PartNoID_H 
Range("S9").Value = PartNoID_I 
Range("S9").Select 
ActiveCell.Calculate 
Range("U9").Value = PartNoID_J 
Range("W9").Value = PartNoID_K 

Range("AD7").Value = "LUS" 
LUSPrice = Range("AE9").Value 
Range("AD7").Value = "USD" 
USDPrice = Range("AE9").Value 
Range("AD7").Value = "DKK" 
DKKPrice = Range("AE9").Value 

Windows(CurWkbk).Activate 
ActiveWorkbook.Sheets("Discount Calculator").Activate 
Range("D5").Value = LUSPrice 

ActiveWorkbook.Sheets("PRICE GENERATOR").Activate 
Range("C25").Value = PartNo & " Pricing | LUS: $" & Round(LUSPrice, 2) & " | USD: $" & Round(USDPrice, 2) & " | DKK: kr " & Round(DKKPrice, 2) 
MsgBox "Tillykke! Pricing for the " & PartNo & " has been generated. The price has been entered into the discount calculator.", , "Pricing Generated" 
Workbooks("EXTERNAL.xls").Close False... 

Répondre

0

vous devriez utiliser des références entièrement qualifiées pour les cellules

ceci est une ré-écriture de votre code

...ElseIf Left(Range("C9").Value, 4) = "LA23" Then   ' which workbook/sheet ???? 

CurWkbk = ActiveWorkbook.Name        ' which workbook ???? 

PartNo = Worksheets("LINAK ONE").Range("C6").Value   ' which workbook ???? 

With Worksheets("GPL Pull") 
    PartNoID_B = .Range("B8").Value 
    PartNoID_C = .Range("C8").Value 
    PartNoID_D = .Range("D8").Value 
    PartNoID_E = .Range("E8").Value 
    PartNoID_F = .Range("F8").Value 
    PartNoID_G = .Range("G8").Value 
    PartNoID_H = .Range("H8").Value 
    PartNoID_I = .Range("I8").Value 
    PartNoID_J = .Range("J8").Value 
    PartNoID_K = .Range("K8").Value 
End With 

Workbooks.Open ("EXTERNAL.xls") 

With Workbooks("EXTERNAL.xls").Worksheets("Price") 
    .Range("E9").Value = PartNoID_B 
    .Range("G9").Value = PartNoID_C 
    .Range("I9").Value = PartNoID_D 
    .Range("K9").Value = PartNoID_E 
    .Range("M9").Value = PartNoID_F 
    .Range("O9").Value = PartNoID_G 
    .Range("Q9").Value = PartNoID_H 
    .Range("S9").Value = PartNoID_I 
    .Range("S9").Calculate 
    .Range("U9").Value = PartNoID_J 
    .Range("W9").Value = PartNoID_K 

    .Range("AD7").Value = "LUS" 
    LUSPrice = .Range("AE9").Value 
    .Range("AD7").Value = "USD" 
    USDPrice = .Range("AE9").Value 
    .Range("AD7").Value = "DKK" 
    DKKPrice = .Range("AE9").Value 
End With 

CurWkbk.Worksheets("Discount Calculator").Range("D5").Value = LUSPrice   ' which workbook ???? 

CurWkbk.Worksheets("PRICE GENERATOR").Range("C25").Value = PartNo & " Pricing | LUS: $" & Round(LUSPrice, 2) & " | USD: $" & Round(USDPrice, 2) & " | DKK: kr " & Round(DKKPrice, 2) 
MsgBox "Tillykke! Pricing for the " & PartNo & " has been generated. The price has been entered into the discount calculator.", , "Pricing Generated" 
Workbooks("EXTERNAL.xls").Close False... 
+0

Merci une tonne @jstola! C'est une bonne pratique à garder à l'esprit, et je l'ai appliqué à mon code. Malheureusement, cela ne résout toujours pas le problème, mais c'est beaucoup plus propre maintenant! –