2017-05-23 4 views
0

Ich stoße auf diesen Fehler Wenn ich "Let SRange =" C "...." stattdessen verwenden, funktioniert es, aber ich will nicht um das Ende der Spalte wie "NV" anzugeben. Ich würde raten, die Spalte in FinalCol zu verwenden. Es könnte einfacher sein, sich den Code anzusehen. Ich habe einige Änderungen .. aber jetzt ist es zu fragen: „Objektvariable oder With-Blockvariable nicht gesetzt“Excel Vba: Methode 'Bereich' des Objekts '_Global' fehlgeschlagen Fehler in Excel

 Option Explicit 

Sub Range_End() 

Dim X As Variant, Count, FinalCol, SRange, XRange As Range 

Sheets("Formatted").Select 

    X = InputBox("enter row number") 


Count = 1 
Do While Cells(4, Count) <> Empty 
    Count = Count + 1 
Loop 
    FinalCol = Count - 1 

    ' Let SRange = "C" & X & ":" & "NV" & X 
SRange = Range(Cells(X, 3), Cells(X, FinalCol)).Address 

    Application.ScreenUpdating = False 
     For Each XRange In Range(SRange) 
      If XRange.Value = "" Then 
       XRange.EntireColumn.Hidden = True 
      Else 
       XRange.EntireColumn.Hidden = False 
      End If 
     Next XRange 

    Application.ScreenUpdating = True 

End Sub 
+1

Try 'Srange = Range (Cells (X, 3), Zellen (X, FinalCol)). Address' –

+1

Auch sollten Sie immer Ihre Variablen deklarieren. Fügen Sie 'Option Explicit' ganz oben hinzu (sogar über' Sub Range_End() ', dann fügen Sie die Variablen hinzu, dh' Dim X als Long', 'Dim SRange als String' (wie Sie es haben, suchen Sie nach einem string, aber vielleicht schauen Sie sich das an, indem Sie einen 'Range' machen, etc ... – BruceWayne

+1

Oder besser SRange als' Range' deklarieren, dann - 'Set SRange = Bereich (Zellen (X, 3), Zellen (X, FinalCol)) 'und dann Schleife über' SRange' direkt. Es gibt keine Notwendigkeit, einen Bereich zu seiner Adresse zu konvertieren und dann diese Adresse zu verwenden, um wieder in den gleichen Bereich zu konvertieren. –

Antwort

1

können Sie versuchen, diese und sehen, ob es funktioniert? Wenn es nicht können Sie uns wissen lassen, welche Linie es Fehler auf und was die Fehlermeldung sagt

Option Explicit 
Public Sub Range_End() 
    Dim X As Variant 
    Dim Count As Long, FinalCol As Long 
    Dim SRange As Range, XRange As Range, HideRange As Range 

    With Sheets("Formatted") 
     .Activate 

     X = InputBox("enter row number") 

     Set SRange = .Range(Cells(X, 3), Cells(X, .Cells(4, .Columns.Count).End(xlToRight).Column)) 
    End With 

    Application.ScreenUpdating = False 
    SRange.EntireColumn.Hidden = False 

    For Each XRange In SRange 
     If XRange.Value = vbNullString Then 
      If HideRange Is Nothing Then 
       Set HideRange = XRange 
      Else 
       Set HideRange = Union(HideRange, XRange) 
      End If 
     End If 
    Next XRange 

    If Not HideRange Is Nothing Then HideRange.EntireColumn.Hidden = True 

    Application.ScreenUpdating = True 
End Sub 
+0

Was ist "vnbnullstring"? es heißt, dass es nicht definiert ist –

+1

ist es vbnullstring? –

+0

Es war ein Tippfehler - Sie haben Recht. Entschuldigen Sie. Auch ich habe es gerade ein wenig mehr geändert, um Ihre do-Schleife zu entfernen, da ich glaube, dass Sie es nicht brauchen (Sie verwenden es nur, um die letzte Spalte zu finden, die wie oben gemacht werden kann) – Tom

Verwandte Themen