Comment résoudre une erreur lors de la lecture d'une valeur de cellule fusionnée à partir d'un file Excel?

J'ai ce code pour lire chaque cellule dans un file excel.

Do Until objRange.Cells(intRow, 1).value.Equals("小 計") 

intRow augmente chaque fois, mais lorsque la cellule pointe sur une ligne fusionnée, disons, par exemple, la ligne 3, 4 et 5 sont fusionnées – lorsqu'elle pointe à 3, elle s'exécute mais lorsqu'elle pointe à 4, elle renvoie une erreur – System.NullReferenceException

Comment puis-je résoudre cette erreur, donc, lorsqu'elle provoque une erreur, elle augmentera simplement et passera à la ligne suivante? J'ai essayé On Error Resume Next mais il semble qu'il ne se soit pas déplacé vers next intRow . Cela entraîne toujours une erreur, mais cette fois, il est logique puisqu'il provoque une erreur, il reprend la ligne suivante, de sorte que l'intRow n'a pas augmenté, mais la valeur semble être à la position incrémentée d'intRow. C'est ce que j'ai compris. Quelqu'un peut-il aussi expliquer comment exactement cela a causé une erreur logique?

Voici mon dernier code qui cause l'erreur logique

  On Error Resume Next Do Until objRange.Cells(intRow, 1).value.Equals("小 計") 'causes an error If objRange.Cells(intRow, 1).Value.Equals("I") Then Do Until objRange.Cells(intRow + 1, 1).Value.Equals("II") If Not objRange.Cells(intRow + 1, 2).Font.Size.Equals("16") Then intBunruiType += 1 arrBunruiType(intBunruiType) = "I" End If intRow += 1 Loop ElseIf objRange.Cells(intRow, 1).value.Equals("II") Then Do Until objRange.Cells(intRow + 1, 1).value.Equals("III") If Not objRange.Cells(intRow + 1, 2).Font.Size.Equals("16") Then intBunruiType += 1 arrBunruiType(intBunruiType) = "I" End If intRow += 1 Loop End If intRow += 1 Loop 

Le programme passe de cette façon. Les valeurs de la cellule dans la première colonne ressemblent à ceci:

 I - - II - - - - - III - - IV 

le - représente le blanc. Donc, lorsque la valeur de la cellule après I est vierge, je récupère I et lorsque la valeur de la cellule est II , je ne récupère que la valeur de la cellule après II et avant III , je vais récupérer II et ainsi de suite … à condition que la colonne suivante dans I, II, III and IV n'a pas la taille de la police 16 .

Lorsque vous avez fait le intRow On Error Resume Next , vous allez toujours avoir le problème car intRow doit être incrémenté afin que vous puissiez accéder à la ligne suivante. Vous pourriez faire quelque chose comme ceci:

 On Error GoTo HandleError 

Ensuite, au bas de votre sous / fonction, vous pouvez intRow quelque chose comme ça pour incrémenter intRow , puis revenir à la ligne qui a provoqué l'erreur:

 HandleError: intRow += 1 Resume 

Une autre façon de gérer cela serait de vérifier si l'object de la cellule n'est rien. Je suppose que l'erreur est causée en essayant d'accéder à la propriété .Value de l'object objRange.Cells(intRow, 1) . Vous ne pouvez pas get une propriété d'un object si l'object n'existe pas. Si tel est le cas, vérifiez si l'object existe même avant de vérifier la valeur. Si ce n'est pas le cas, il suffit d'incrémenter intRow . Vous pouvez vérifier si l'object existe avec quelque chose comme ceci:

 If objRange.Cells(intRow, 1) = Nothing Then End If