2016-02-09 2 views
-1

Je travaille sur une feuille Excel de taille de ligne A: ZZ et il ne devrait y avoir que 7 cellules avec des valeurs. J'essaye de faire une sorte de "filtre" qui vérifiera le nombre de cellules non vides et dans le cas où il y aura plus de 7 cellules non vides, imprimera un message dans MsgBox (et jusqu'à ce que ce point fonctionne). Mais dans la MsgBox, je voudrais juste voir aussi les valeurs de la ligne (séparées par exemple avec coma) - ceci ne fonctionne pas en raison d'un problème de syntaxe Intersect. Voici le codeAfficher dans MSgBox toutes les valeurs non vides de la ligne

Sub blanks() 
    Dim a, b As Integer 
    a = 0 

    Range("A1").Select 
    Do 
    With ActiveSheet.Range(Rows(b)) 
     b = ActiveCell.Row 
     a = Application.WorksheetFunction.CountA(ActiveSheet.Rows(b)) 

     If a > 7 Then 
     MsgBox ("ERROR" & "/n" & Application.Intersect(.SpecialCells(xlCellTypeVisible))) 
     Exit Do 
     Else 
     ActiveCell.Offset(1, 0).Select 
     End If 

    End With 
    Loop Until ActiveCell = "stop" 
End Sub 

Qu'est-ce qui ne va pas?

+0

alors qu'il ne devrait pas fonctionner (à'Avec ActiveSheet .Range (lignes (b)) 'cus' b' est '0') je suggère toujours d'utiliser' .SpecialCells (xlCellTypeVisible) .Address'. cela devrait montrer les plages qui ne sont pas vides (pas les valeurs) ... si vous avez besoin des valeurs, vous auriez besoin d'une boucle 'For Each ...' ... (pas besoin de 'Application.Intersect') du tout) –

Répondre

0

Cela vous donnera les valeurs constantes (et non d'une formule):

Sub ShowValues() 
    Dim rowNum As Long 
    Dim rowRange As Range 
    Dim valRange As Range 
    Dim msg As String 

    rowNum = 1 
    With ThisWorkbook.Worksheets("Sheet1") 
     Do While .Cells(rowNum, 1) <> "stop" 
      Set rowRange = .Cells(rowNum, 1).Resize(1, 702) 
      If Application.WorksheetFunction.CountA(rowRange) > 7 Then 

       'Add row number to message. 
       msg = msg & "Row: " & rowRange.Row & ": " 

       'Add values to message separated by comman. 
       For Each valRange In rowRange.SpecialCells(xlCellTypeConstants) 
        msg = msg & valRange.Value & ", " 
       Next valRange 

       'Remove last comma. 
       msg = Left(msg, Len(msg) - 2) 

       'Line break. 
       msg = msg & vbCr 
      End If 
      rowNum = rowNum + 1 
     Loop 
    End With 
    MsgBox msg, vbOKOnly + vbInformation 
End Sub 

ou cela vous donnera les adresses:

Sub ShowAddressOfValues() 
    Dim rowNum As Long 
    Dim rowRange As Range 
    Dim msg As String 

    rowNum = 1 
    With ThisWorkbook.Worksheets("Sheet1") 
     Do While .Cells(rowNum, 1) <> "stop" 
      Set rowRange = .Cells(rowNum, 1).Resize(1, 702) 
      If Application.WorksheetFunction.CountA(rowRange) > 7 Then 
       msg = msg & "Row: " & rowRange.Row & ". Address: " & _ 
        rowRange.SpecialCells(xlCellTypeConstants).Address & vbCr 
      End If 
      rowNum = rowNum + 1 
     Loop 
    End With 
    MsgBox msg, vbOKOnly + vbInformation 
End Sub 
+0

C'est fondamentalement exactement ce dont j'avais besoin, mais la boucle avec se termine toujours par un message (également vide). Comment, de cette façon, faire quelque chose comme: «s'il y a plus que ces 7 valeurs que d'imprimer un message et si ce n'est pas juste continuer avec la fin de cette fonction (continuer)? – vonski