![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
イベント内プログラムで以下のようにフォームのコントロールの削除を行っていますが、
コントロール名が条件に合っていても削除されません。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
コントロールの存在確認
Visual Basic(VBA)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
-
4
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
5
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
6
ACCESSでコントロールソースの変更
Access(アクセス)
-
7
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
8
新規レコード行を非表示にしたい
Access(アクセス)
-
9
accessでフィールド追加のあとフォームに反映されない
Access(アクセス)
-
10
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
11
Accessのフォームのみ表示させたい
Access(アクセス)
-
12
Access サブフォームでの選択行の取得
その他(データベース)
-
13
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
14
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
15
Access フォーム「使用可能」を「いいえ」にすると・・
その他(データベース)
-
16
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
17
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
VBAのエラーについて、”実行時...
-
カメラスクロールするのを動画...
-
(VBA)スピンボタンの大量...
-
Winsockコントロールを使用して...
-
なかなか、Zオーダーが理解で...
-
エクセルVBAで For Each をま...
-
Access2007 コントロールの削除
-
フォーカスのあるコントロール
-
excelのリストボックスで選択し...
-
エクセル コントロールツール...
-
PDF起動時のナビゲーションパネ...
-
ActiveX コントロールの初期化
-
DataGridViewとSPREADの機能比較
-
エクセル・オプションボタン・...
-
vb.net メニューをダブルクリッ...
-
With~EndWithの省略部分と引数...
-
実行画面が崩れてしまう
-
C#で角が丸いテキストボックス
-
コントロールの絶対位置を取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
EXCELでactivexコントロールを...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
chr関数の呼び出しで「プロ...
-
変数をコントロール型で使用す...
-
ExcelVBAでListViewが使用できない
-
VBAのエラーについて、”実行時...
-
間違えて配置してしまったコン...
-
VBAのフォームでTextBoxがいっ...
-
Groupboxの配下のコントロール...
-
excelのリストボックスで選択し...
-
ACCESS2010のVBAでフォーム内ク...
-
エクセルVBAでオプションボタン...
-
フォーム上の現在アクティブな...
-
ユーザーフォームで動的(Me.Con...
-
コンボボックスの文字によるif...
-
コントロールを移動できない
おすすめ情報