Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


256 / 3841 ページ ←次へ | 前へ→

【77318】Re:実行時エラー91について
発言  β  - 15/7/5(日) 19:26 -

引用なし
パスワード
   ▼ぴょん さん:

あぁ、エラーの場所は、様々なところで特定はされていないんですね。
じゃぁ、↑のDoEvents 手当ては無意味ですので無視してください。

ウォッチ式をいれて監視してみましょうか。

・標準モジュールのws1をマウスでクリック
・デバッグ->ウォッチ式の追加
・式を ws1 Is Nothing 、ウォッチの種類を 式がTrueの時に中断
・プロシジャを すべてのプロシジャ、モジュールも すべてのモジュール
・OKボタン

ws2 についても同様。

これで、実行中、ws1やws2が Nothing になった瞬間に、その次のコードでとまるはずです。
・ツリー全体表示

【77317】Re:実行時エラー91について
発言  β  - 15/7/5(日) 18:03 -

引用なし
パスワード
   ▼ぴょん さん:

だめもとで、

>    With Ws2.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False)

この後に、DoEvents をいれてみてください。
何往復かして、確かめていただけませんか。
・ツリー全体表示

【77316】実行時エラー91について
質問  ぴょん  - 15/7/5(日) 17:27 -

引用なし
パスワード
   ”実行時エラー:91 オブジェクト変数またはWithブロック変数が設定されていません”が出る時があります。

・オブジェクト型変数はプロジェクト内で共通参照できるように、Publicで宣言。
ブックオープン時に1回だけSetを実施。
・ワークシート2に2つあるボタン(チェックボックスの作成、削除)を、交互に動かすと早い時は1往復くらいで、たまに3往復目くらいまで行く時がありますが上記エラーになってしまいます。
(エラーが発生する回数、エラーが発生する場所とも不特定。場所はいずれもWsを参照している箇所ですが、複数個所あります)

何か解放漏れとかですか?

ちなみに、Workbook_BeforeClose時に、Set Wb = Nothing、Set Ws1 = Nothing、Set Ws2 = Nothingはしてます。

力不足のため、ご教授のほどよろしくお願いします。

■標準モジュール
Public Wb As Workbook       'ワークブック
Public Ws1 As Worksheet       'ワークシート
Public Ws2 As Worksheet       'ワークシート

■ワークブックプロシージャ
Private Sub Workbook_Open()

  Set Wb = Workbooks("Book.xlsm")
  Set Ws1 = Wb.Worksheets("Sheet1")
  Set Ws2 = Wb.Worksheets("Sheet2")

  Ws1.Cells(1, 1).Value
  Ws2.Cells(1, 1).Value

End Sub

■ワークシート2
Private Sub チェックボックス作成_Click()
  For CheckBoxIndex = 1 To XX
    
    'チェックボックスを作成する
    With Ws2.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False)
      .Object.Caption = Ws2.Cells(省略)
      以下省略
    End With
    
  Next CheckBoxIndex

End Sub

Private Sub チェックボックス削除_Click()

  For Each tCtrl In Ws2.Shapes
    
    If Left(tCtrl.Name, 8) = "CheckBox" Then
      Ws2.Shapes(tCtrl.Name).Delete
    End If
  
  Next

End Sub
・ツリー全体表示

【77315】Re:AutoFilter について
お礼  ぴょん  - 15/7/5(日) 9:04 -

引用なし
パスワード
   ▼β さん:
さすが、かっこいいですね。
大変ありがとうございました。
・ツリー全体表示

【77314】Re:パスワードでロック
発言  β  - 15/7/5(日) 6:46 -

引用なし
パスワード
   ▼翔子 さん:

マクロ処理をしなくても、手作業で、注文書シートの該当セルの書式を変更しておけばいいのでは?
と思ったんですが、マクロでやるなら。

Sub TestProtect()

'注文書シートロック UserInterfeceOnly付
  With Sheets("注文書")
    .Protect Password:="111", DrawingObjects:=True, _
      Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    .Range("E2,E4,G4").Locked = False
  End With
End Sub
・ツリー全体表示

【77313】Re:AutoFilter について
発言  β  - 15/7/5(日) 1:21 -

引用なし
パスワード
   ▼ぴょん さん:

以下のようにかくこともできますよ。

Sub HideDropDown()
  Dim x As Long
  
  For x = 1 To ActiveSheet.AutoFilter.Filters.Count
    ActiveSheet.AutoFilter.Range.AutoFilter Field:=x, VisibleDropDown:=False
  Next
  
End Sub
・ツリー全体表示

【77312】Re:AutoFilter について
発言  ぴょん  - 15/7/5(日) 0:04 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:
>

以下みたいに、ベタな方法しか思いつかなです。
もう少し、スマートな方法があればと思ったのですが。

  LoopIndex = 1
  
  Do While LoopIndex <= 4  'とりあえず4
    
      
    ActiveSheet.AutoFilter.Range.AutoFilter Field:=LoopIndex, VisibleDropDown:=False
    LoopIndex = LoopIndex + 1
  
  Loop
・ツリー全体表示

【77311】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 23:47 -

引用なし
パスワード
   ▼β さん:

ありがとうございます。B列は非表示になりました。
実際はN列まであるのですが、Fieldの指定はどうなるのでしょう?
・ツリー全体表示

【77310】Re:パスワードでロック
質問  翔子  - 15/7/4(土) 23:23 -

引用なし
パスワード
   β様


>この質問を出されたのかがわからなかったので
すみません。説明が下手で。

最初は、注文書Sheet[E2,E4,G4] 外を一般機能を使い
保護解除→マクロでセルに書き込み→再保護と考えていました。

β様が
保護解除→マクロでセルに書き込み→再保護
>って面倒じゃないですか?
>ThisWorkbookモジュールに
>Private Sub Workbook_Open()
>  '注文書シートロック UserInterfeceOnly付
>   Sheets("注文書").Protect Password:="111", DrawingObjects:=True, _
>      Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
> End Sub
>こう書いておくと、操作者からはプロテクト、マクロは自由自在で
>いちいち、解除/再保護する必要がなくなりますよ。
と教えてくれました。
私は、VBAは勉強中なので「こんなやり方があったんだ」と思い
β様のやり方で、注文書Sheet[E2,E4,G4]だけをContents:=Falseに
すれえば良い思って。
  '注文書シートロック UserInterfeceOnly付
  Sheets("注文書").Protect Password:="111", DrawingObjects:=True, _
      Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
   Sheets("注文書").Range("E2.E4,G4").Contents:=False
End Sub
としたんですがダメでした。

注文書シート保護をかけても("E2.E4,G4")セルは操作者の入力をさせたい
のです。

宜しくおねがいします
・ツリー全体表示

【77309】Re:AutoFilter について
発言  β  - 15/7/4(土) 23:04 -

引用なし
パスワード
   ▼ぴょん さん:

>ドロップダウン矢印は消えたのですが、AutoFilterの実行結果が、AutoFilter実行前に戻ってしまいました。
>AutoFilterの実行結果はそのままに、ドロップダウン矢印を消す方法はない?

よくわからないのですが、現在の設定は(なぜか)B列が▼あり、C列が▼なしですよね。
で、やりやいことは、▼を消す? つまり、B列の▼を消したいということですか?
それなら、最初から消しておけばいいのでは?
いったんB列は▼を表示しておいて、別のタイミングで、あとから非表示にしたいのですか?

いずれにしても以下は、抽出結果はそのままで、B列の▼を非表示にします。

Sub test()
  ActiveSheet.AutoFilter.Range.AutoFilter Field:=1, VisibleDropDown:=False
End Sub



・ツリー全体表示

【77308】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 22:32 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:

たびたびすいません。やっぱダメでした。
ドロップダウン矢印は消えたのですが、AutoFilterの実行結果が、AutoFilter実行前に戻ってしまいました。
AutoFilterの実行結果はそのままに、ドロップダウン矢印を消す方法はない?
・ツリー全体表示

【77307】Re:AutoFilter について
お礼  ぴょん  - 15/7/4(土) 22:11 -

引用なし
パスワード
   ▼β さん:

そうかもしれません。

下記■質問2ですが、ワークシートのプロパティに、AutoFilterModeプロパティでした。
VisibleDropDown:=Falseはちゃんと非表示でした。
お騒がせしました。
いつもご親切な回答ありがとうございます。

>■質問2
>  当初VisibleDropDown:=Falseで矢印が非表示になっていたのですが、何かをきっかけに非表示にならなくなってしまいました。
>  何がいけないのでしょうか?
・ツリー全体表示

【77306】Re:AutoFilter について
発言  β  - 15/7/4(土) 21:07 -

引用なし
パスワード
   ▼ぴょん さん:

>あれ?もう一回やったら、B2:C7と認識されました。
>B2:C9も、MsgBoxで確認したんですけど、なんだったのか(^^;

推測ですけど、挿入した8行目が【本当の空白行】ではなく
挿入の際に【指が触れて】スペースがはいってしまったとか?
・ツリー全体表示

【77305】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 19:25 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:
あれ?もう一回やったら、B2:C7と認識されました。
B2:C9も、MsgBoxで確認したんですけど、なんだったのか(^^;
・ツリー全体表示

【77304】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 19:16 -

引用なし
パスワード
   ▼β さん:
いつもありがとうございます。
MsgBoxで確認してみました。
βさんの言われた通りB2:C8と認識されていました。
そこで、8行目に空行を追加し9行目に”最終行”としたところ、B2:C9と認識されました。
空行でも、連続域として認識されてしまうのですね?
どうすれば、連続域として認識されないようになるのでしょうか?

ちなみに、質問2については色々考えてみます。
・ツリー全体表示

【77303】Re:AutoFilter について
発言  β  - 15/7/4(土) 17:46 -

引用なし
パスワード
   ▼ぴょん さん:

ごめんなさい。
「以下を実行してください」の、「以下」のコードがぬけていました。

Sub 確認()
  MsgBox ActiveSheet.AutoFilter.Range.Address
End Sub
・ツリー全体表示

【77302】Re:AutoFilter について
発言  β  - 15/7/4(土) 17:44 -

引用なし
パスワード
   ▼ぴょん さん:
>■質問1

フィルタリングされた状態で、以下を実行してください。
オートフィルターが認識しているリスト領域のアドレスを表示します。
つまり、8行目もリスト領域になっていて、2列目が指定の1,2,3ではないので
非表示になるということです。
Target配列のどこかに設定がないということは "" が抽出条件として指定されたということで
2列目が空白の最終行が抽出されたということです。

オートフィルターの設定は、指定の領域を基準に【連続した領域すべて】をリスト領域にします。
これは仕様です。

極端な話、フィルターがかかっていない状態で

  Range("B2").AutoFilter Field:=2, _
    Criteria1:=Target, _
    Operator:=xlFilterValues, VisibleDropDown:=False

このように B2 のみを指定しても、連続した領域がフィルター対象になりますよね。

>■質問2
>何かをきっかけに非表示にならなくなってしまいました。
>何がいけないのでしょうか?

う〜ん・・・・
その何かをきっかけに・・という何かを、いろいろ試行してつきとめてみられてはいかがですか。
何か がわかれば回答もできると思うのですが。
・ツリー全体表示

【77301】AutoFilter について
質問  ぴょん  - 15/7/4(土) 17:07 -

引用なし
パスワード
   AutoFilter について、2点質問させてください。

■質問1

下表のデータで、

  A  B     C
1        
2    住所     優先順位
3    東京都      1
4    東京都      1
5    神奈川県      2
6    静岡県      3
7    静岡県      3
8    最終行    


下記ソースを実行(Tagetに全て設定)すると、表の一番したの最終行が非表示になってしまいます。
(ちなみに、Tagetに全て設定しないパターンは、どの組み合わせも非表示になるものは非表示になり、最終行も表示されます)
デバッグでも原因が掴めなかったため、ご教授ください。

Sub 質問()
  Dim Target(2) As String
  
  Target(0) = 1
  Target(1) = 2
  Target(2) = 3

  Range(Cells(2, 2), Cells(7, 3)).AutoFilter Field:=2, _
    Criteria1:=Target, _
    Operator:=xlFilterValues, VisibleDropDown:=False

End Sub


■質問2
 当初VisibleDropDown:=Falseで矢印が非表示になっていたのですが、何かをきっかけに非表示にならなくなってしまいました。
 何がいけないのでしょうか?


以上、よろしくお願いします。
・ツリー全体表示

【77300】Re:パスワードでロック
発言  β  - 15/7/4(土) 13:58 -

引用なし
パスワード
   ▼翔子 さん:

うんちくをタラタラ述べた理由は、コメントしましたように「質問の意図」というか
なぜ、この質問を出されたのかがわからなかったので、まとはずれかもしれませんけど
いくつかメモしたものの中に、翔子さんが、あぁ、これか! と発見いただけるかなと。

>>注文書E2,E4,G4は入力出来るようにしたいのです。
>注文書には、(氏名1、氏名2、TEL)をお客に入力してもらうからです。

入力すればいいと思いますが、入力できなくなっているということでしょうね?
メモの中にもありますが、シート保護をすると、セル書式の保護でロックされているセルの入力はできなくなります。
セル書式の保護は、初期値は全セル、保護、つまり、シート保護を掛けると入力できなくなります。

逆にいえば、シート保護をかけても、このセルとこのセルは操作者の入力をさせたいということなら
それらセルを選び、セル書式の保護タブのロックのチェックをはずせばいいんですが?
・ツリー全体表示

【77299】Re:パスワードでロック
質問  翔子  - 15/7/4(土) 1:35 -

引用なし
パスワード
   β様

お返事大変遅くなりすみません。

詳しい説明ありがとうございます。
理解するのに時間がかかりそうです。

>注文書E2,E4,G4は入力出来るようにしたいのです。
注文書には、(氏名1、氏名2、TEL)をお客に入力してもらうからです。
・ツリー全体表示

256 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free