イベント内プログラムで以下のようにフォームのコントロールの削除を行っていますが、
コントロール名が条件に合っていても削除されません。
DeleteControlが失敗しているのではなく、 If Left(ctlSche.Name, 6) = "lblBox" Then にひっかからないようです。
しかも、同じように 頭に"lblBox"とつくラベルコントロールでも、ひっかかるものとそうでないものがあります。
以下のコーディングでは不十分でしょうか?
Dim ctlSche As Control
DoCmd.Close acForm, FName, acSaveYes
DoCmd.OpenForm FName, acDesign, , , , acHidden
Set ctlSche = CreateControl(FName, acLabel)
For Each ctlSche In Forms!TestForm.Controls
If Left(ctlSche.Name, 6) = "lblBox" Then
'コントロールの削除
DeleteControl FName, ctlSche.Name
End If
Next
DoCmd.Close acForm, FName, acSaveYes
DoCmd.OpenForm FName, acDesign, , , , acHidden
No.2ベストアンサー
- 回答日時:
確認しながらやってみますか
テスト用の環境で確認していきます。
以下を標準モジュールに記述し、実行してみます。
Public Sub Sample()
Dim ctl As Control
Dim i As Long
With CreateForm
For i = 1 To 5
With CreateControl(.Name, acLabel, acDetail, , , _
567, 567 * i, 567 * 3, Int(567 * 0.5))
.Name = "lblBox" & i
.Caption = "lblBox" & i
End With
Next
For Each ctl In .Controls
Debug.Print ctl.Name
Next
' ★ ~
For Each ctl In .Controls
Debug.Print "Del : ", ctl.Name
If (Left(ctl.Name, 6) = "lblBox") Then
DeleteControl .Name, ctl.Name
End If
Next
' ~ ★
End With
End Sub
やっていることは、
新規フォームを作成し、
ラベルを5つ(lblBox1 ~ lblBox5)作成し、
' ★ ~ の前で、Controls 内のコントロール名をイミディエイトウィンドウへ表示
' ★ ~ ' ~ ★ 間で、削除してみる。
実行してみると、
新規フォームがデザインモードで、
ラベル「lblBox2」「lblBox4」が残った状態になります。
これは、削除した時に後ろで管理されているものが詰まってくるんですね。
削除前
(0) lblBox1
(1) lblBox2
(2) lblBox3
(3) lblBox4
(4) lblBox5
lblBox1 を削除すると、その時点で
(0) lblBox2
(1) lblBox3
(2) lblBox4
(3) lblBox5
になって、次のものを頂戴・・・ってなった時、今は(0) だったから (1) を・・・
データとしてみれば「lblBox2」を飛び越えて「lblBox3」が次のものになります。
なので、上記実行でラベル「lblBox2」「lblBox4」が残る説明がつきます。
前から処理して詰まるのであれば、詰まっても良いように後ろから処理する記述に変更します。
' ★ ~ ' ~ ★ 間の記述を以下に変更します。
For i = .Controls.Count - 1 To 0 Step -1
Debug.Print "Del2 : ", .Controls(i).Name
If (Left(.Controls(i).Name, 6) = "lblBox") Then
DeleteControl .Name, .Controls(i).Name
End If
Next
参考になる/ならない等、自己責任でお願いします。
解釈が違ってましたら、スルーしてください。
※ 何をしたい処理の記述なのか、ご質問内容からわかりませんでした。
ただ、フォーム名を「FName」で持っているのなら、
Forms!TestForm.Controls 部分の記述は Forms(FName).Controls
の方が良さそうでしたが・・・
(対象のフォームが一緒なら)
30246kikuさん
お返事どうもありがとうございます。
1つ削除した後に、直後のコントロールが飛ばされるというご説明、大変よくわかりました。
サンプルのコーディングに直したところ対象のものが全て削除できました。
ありがとうございました。
No.1
- 回答日時:
> DeleteControlが失敗しているのではなく、
> If Left(ctlSche.Name, 6) = "lblBox" Then にひっかからないようです。
それなら
If Left(ctlSche.Name, 6) = "lblBox" Then
~
Else
Debug.Print("『" & Left(ctlSche.Name, 6) & "』")
End If
みたいにするだけで何故ひっかからないか分かるのでは?
条件を満たしていないからひっかからないと思うべきでは?
テキストエディタにでも貼り付ければ、全角半角の違いや
スペースが入っていたりというケアレスミスの確認くらい
簡単でしょう?
そのくらいの確認は事前にして質問文で報告しておくように
してください。
私は
> DeleteControlが失敗しているのではなく、
> If Left(ctlSche.Name, 6) = "lblBox" Then にひっかからないようです。
ではなく
> For Each ctlSche In Forms!TestForm.Controls
で取れてきていないのでは?と考えますが。
For Each ctlSche In Forms!TestForm.Controls
Debug.Print(ctlSche.Name)
Next
の実行結果は?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
コントロールの存在確認
Visual Basic(VBA)
-
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
-
4
フォーム上の全てのコントロールを取得したい
Access(アクセス)
-
5
アクセス フォームが存在するかを一発で取得したい
Visual Basic(VBA)
-
6
ACCESSフォームにコントロールが追加できない
Access(アクセス)
-
7
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
8
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
9
現在アクティブなタブのページ名を取得したい
Access(アクセス)
-
10
フォーム データシートビューで文字色を変えたい
Access(アクセス)
-
11
スクロールバーをVBAで操作したい
Access(アクセス)
-
12
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
13
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
14
もしフォームヘッダーにコントロールがあるのなら
Access(アクセス)
-
15
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
Groupboxの配下のコントロール...
-
エクセルVBAでオプションボタン...
-
カメラスクロールするのを動画...
-
VBA ユーザーフォームの Keypre...
-
Excel VBA で Richtextboxを使...
-
ExcelVBAでListViewが使用できない
-
ExcelVBAのコントロールの種類...
-
OCXって何ですか?
-
Labelコントロールの(左右)余...
-
Pictureコントロールの...
-
チェックボックスをオンにした...
-
EXCELでactivexコントロールを...
-
コントロールを移動できない
-
ユーザーフォームで動的(Me.Con...
-
無料で使えるグリッドコントロール
-
PDQCommは今でも入手できますで...
-
[MFC]コントロールに合わせてフ...
-
エクセル コントロールツール...
-
ワークシート上のコントロール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
エクセルVBAでオプションボタン...
-
ExcelVBAでListViewが使用できない
-
ユーザーフォームで動的(Me.Con...
-
VBA ユーザーフォームの Keypre...
-
チェックボックスをオンにした...
-
Groupboxの配下のコントロール...
-
Labelコントロールの(左右)余...
-
コントロールを移動できない
-
C# Form上に配置されたコントロ...
-
EXCELでactivexコントロールを...
-
'ckbl' コントロールは作成され...
-
vb.netで画面のコントロールId...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
C#で角が丸いテキストボックス
-
変数をコントロール型で使用す...
-
全てのオブジェクトのプロパテ...
-
コンボボックスの文字によるif...
おすすめ情報