2016-04-01 15 views
0

ボタンをクリックして特定の列を展開する別のスプレッドシートでこのサブを使用しました。いくつかの行を折りたたむために新しいスプレッドシートにコピーしましたが、今は「Subまたは関数が定義されていません」というエラーが表示されます。それは、このワークブックには他のスクリプトはありませんButtonsサブ機能が定義されていません:ボタン()

Sub HideDetails() 
    Range("3:8").Select 
    If Selection.EntireColumn.Hidden Then 
     Selection.EntireColumn.Hidden = False 
     Buttons("btnToggleDetails").Caption = "-" 
    Else 
     Selection.EntireColumn.Hidden = True 
     Buttons("btnToggleDetails").Caption = "+" 
     Range("A1").Select 
     Application.CutCopyMode = False 
    End If 
    Range("A1").Select 
    Application.CutCopyMode = False 
End Sub 

を強調しています。これはもともとModule1にありましたが、新しいモジュールに移動しようとしました。

enter image description here

編集:私はコードではなく、スクリーンショットにボタン名を変更しました。両方の参照は今のところbtnToggleDetailsですが、それでも同じエラーが発生します。

答えて

1

識別子Buttons()が現在の有効範囲内に見つかりません。 Buttons()は、あなたがどこかに宣言したのものであれば、あなたのいずれかがそれを公開する必要があるか、完全例えば、Buttons()オブジェクトを含むオブジェクトを修飾する必要があります。

Sheet1.Buttons("btnToggleDetails").Caption = "+" 
+0

エラーを修正しましたが、まだ「EntireColumn」参照があるため、ブック全体が表示されず、元に戻すことができません。 lol –

+0

http://superuser.com/questions/1060182/accidentally-hid-all-columns-with-a-macro-how-do-i-get-them-back –

+0

リボンの[ホーム]タブで、 「セル」グループを選択し、「フォーマット」ボタンを選択します。そこから、HideとUnhideを選択して、Unhide Columnsを選択します。将来、すべての列を非表示にしたい場合は、ワークシートを隠すほうがよいでしょう。 –

1

があったように私の答えを追加する必要がありました

Selection.EntireColumn.HiddenがTRUE/FALSEまたは0/-1を返すと考えると、私はコードの行を短くすることができます。
CHR(45)はマイナス記号です。
CHR(43)はプラス記号です。

ABSターン-1 1

にだから: FALSE場合TRUE(0)、次いで45-(0 * 2)45
をIF =(-1)を45-(1 * 2)= 43

これは、可視光およびその逆に隠され、イミディエイトウィンドウで正しいボタンのキャプションを表示から列を入れ替えます:

Sub HideShowColumns() 

    Selection.EntireColumn.Hidden = Not (Selection.EntireColumn.Hidden) 
    Debug.Print Chr(45 - (Abs(CLng(Selection.EntireColumn.Hidden)) * 2)) 

End Sub 

これはあなたの手順で作業する必要があります

Sub HideDetails() 

    Dim rng As Range 
    Set rng = ActiveSheet.Range("3:8") 

    rng.EntireColumn.Hidden = Not (rng.EntireColumn.Hidden) 
    Buttons("btnToggleDetails").Caption = Chr(45 - (Abs(CLng(rng.EntireColumn.Hidden)) * 2)) 

End Sub 
+0

これは問題を解決しません(これは 'Buttons'に' ActiveSheet.'を付け加えたものです)が、コードの改良点です!これはあなたの現在の部屋について話していると思います。 –

関連する問題