
イベント内プログラムで以下のようにフォームのコントロールの削除を行っていますが、
コントロール名が条件に合っていても削除されません。
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も見ています
-
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
コントロールの存在確認
Visual Basic(VBA)
-
ACCESSフォームにコントロールが追加できない
Access(アクセス)
-
-
4
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
5
アクセス フォームが存在するかを一発で取得したい
Visual Basic(VBA)
-
6
現在アクティブなタブのページ名を取得したい
Access(アクセス)
-
7
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
フォーム上の全てのコントロールを取得したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
PDF起動時のナビゲーションパネ...
-
iPhoneのアプリ開発でユーザ操...
-
ユーザコントロールのイベント...
-
Shapeコントロールを実行時に任...
-
エクセルVBAでオプションボタン...
-
PDFファイルを印刷するプログラム
-
chr関数の呼び出しで「プロ...
-
EXCELでactivexコントロールを...
-
無料で使えるグリッドコントロール
-
vb.netで画面のコントロールId...
-
VBA ユーザーフォームの Keypre...
-
TEXTBOXでカンマ編集
-
【C#】ツールチップを複数設定...
-
現代文読解力開発講座の問題です。
-
VBAのカレンダーコントロールに...
-
「シートを最前面」にしたいの...
-
iPhone設定
-
チェックボックスをオンにした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
EXCELでactivexコントロールを...
-
エクセルVBAでオプションボタン...
-
チェックボックスをオンにした...
-
カメラスクロールするのを動画...
-
'ckbl' コントロールは作成され...
-
ExcelVBAでListViewが使用できない
-
Groupboxの配下のコントロール...
-
ユーザーフォームで動的(Me.Con...
-
VBA ユーザーフォームの Keypre...
-
vb.netで画面のコントロールId...
-
全てのオブジェクトのプロパテ...
-
間違えて配置してしまったコン...
-
chr関数の呼び出しで「プロ...
-
VBAのフォームでTextBoxがいっ...
-
OCXって何ですか?
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
コントロールを移動できない
-
Labelコントロールの(左右)余...
おすすめ情報