2017-12-01 21 views
0

ヘッダー名を見つけてそれらの列を非表示にして、VBAの列のヘッダーをループしようとしています。 隠す部分はうまく動作しますが、単純な「再表示」を行い、エラーがスローされました。 実行時エラー '92':Forループが初期化されていません。VBA 1つのサブで作業するループ初期化で、ほとんど同じサブが動作しない

私が変更した唯一のものは、現在の選択を非表示にするかどうか(TrueまたはFalse)です。私は変数名を変更しようとしました。おそらく何かがサブシステム間で共有することによってうんざりしていると思っていましたが、それは助けになりませんでした。

WORKING '隠す' サブのコードを下回っている:非稼働 'ショー' サブは以下の通りです

Public Sub Activate_Print_Mode() 

Dim SearchArray() As Variant SearchArray = Array("ISBN", "Sub Title", 
"Paper Cut Off", "Despatch Date (ExW)", "Printer Location", "UK WH 
ETA", "Suggested Pub ExW", "Suggested Pub ExUK", "INDENT/STATUS", 
"UK VAT Price", "FX", "GB Net Price", "AU Price + Freight", "S/A", 
"Discount", "PRICE NOTES", "ORDERED", "Budget Value", "Misc Specs") 

Dim element As Variant 

For Each element In SearchArray 
    ' perform search, hide column 
    'counter = counter + 1 
    Rows("3:3").Select 
    Selection.Find(What:=element, After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _ 
     MatchCase:=True, SearchFormat:=False).Activate 
    ActiveCell.Offset(-1, 0).Select 


    Selection.EntireColumn.Hidden = True 


    Next element 
     ActiveSheet.Range("A1").Select 

End Sub 

Public Sub DeActivate_Print_Mode() 

Dim DispSearchArray() As Variant SearchArray = Array("ISBN", "Sub 
Title", "Paper Cut Off", "Despatch Date (ExW)", "Printer Location", 
"UK WH ETA", "Suggested Pub ExW", "Suggested Pub ExUK", "INDENT/
STATUS", "UK VAT Price", "FX", "GB Net Price", "AU Price + Freight", 
"S/A", "Discount", "PRICE NOTES", "ORDERED", "Budget Value", "Misc 
Specs") 

Dim DispElement As Variant 


For Each DispElement In DispSearchArray 
    ' perform search, hide column 
    'counter = counter + 1 
    Rows("3:3").Select 
    Selection.Find(What:=element, After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _ 
     MatchCase:=True, SearchFormat:=False).Activate 
    ActiveCell.Offset(-1, 0).Select 
    Selection.EntireColumn.Hidden = False 

    Next DispElement 
     ActiveSheet.Range("A1").Select 

End Sub 

できますか?

+0

すべての範囲オブジェクトが相対親シートに割り当てられていることを確認してください。 'Worksheets(" Sheet1 ")。行(3)' –

+0

"動作しません"は、2番目の例を実行すると何が起こるかについての良い説明ではありません。しかし、 'Find()'は隠しカラム/行の値を見つけられないので、うまくいきません。代わりにセルをループする必要があります。 –

答えて

0

Find()が非表示の列/行に

を値を見つけていない私は、この(未テスト)のような何かをするだろう

Sub hidethem() 
    Set_Print_Mode True 
End Sub 
Sub showthem() 
    Set_Print_Mode False 
End Sub 

Public Sub Set_Print_Mode(doHide As Boolean) 

    Dim SearchArray As Variant 
    Dim m, rng As Range, sht As Worksheet 
    Dim element As Variant 

    Set sht = ActiveSheet 

    SearchArray = Array("ISBN", "Sub Title", _ 
    "Paper Cut Off", "Despatch Date (ExW)", "Printer Location", "UK WHETA", _ 
    "Suggested Pub ExW", "Suggested Pub ExUK", "INDENT/STATUS", _ 
    "UK VAT Price", "FX", "GB Net Price", "AU Price + Freight", "S/A", _ 
    "Discount", "PRICE NOTES", "ORDERED", "Budget Value", "Misc Specs") 

    For Each element In SearchArray 
     m = Application.Match(element, sht.Rows(3), 0) 
     If Not IsError(m) Then 
      If rng Is Nothing Then 
       Set rng = sht.Columns(m) 
      Else 
       Set rng = Application.Union(rng, sht.Columns(m)) 
      End If 
     End If 
    Next element 

    If Not rng Is Nothing Then rng.Hidden = doHide 

    sht.Range("A1").Select 

End Sub 

は、ヘッダー行のパラメータを追加することで、より汎用的な作ることができるとヘッダの配列のための1 ...

0

これは私の作品:

Public Sub UnHideColumns() 

Dim ws As Worksheet 
Dim lastCell As Integer 
Dim DispSearchArray() As Variant 

Set ws = Sheets("Sheet1") 
lastCell = ws.Range("1:1").End(xlToRight).Column 
DispSearchArray = Array("ISBN", "Sub Title", "Paper Cut Off", "Despatch Date (ExW)", "Printer Location", "UK WH ETA", "Suggested Pub ExW", "Suggested Pub ExUK", "INDENT/STATUS", "UK VAT Price", "FX", "GB Net Price", "AU Price + Freight", "S/A", "Discount", "PRICE NOTES", "ORDERED", "Budget Value", "Misc Specs") 

For Each Header In DispSearchArray 
    For j = 1 To lastCell 
     If Cells(1, j) = Header Then 
      ws.Cells(1, j).Select 
      Selection.EntireColumn.Hidden = False 
     End If 
    Next j 
Next Header 

Set ws = Nothing 

End Sub 

少し透明感があるように感じますが、それは私だけです。試してみる!

関連する問題