2

次のコードがあります。これは、プロジェクト内のすべてのフォームをループし、各フォームの設定を含むメッセージボックスを提供する必要があります。他の場所でループを使用してコピーしただけなので、ループが正しいことはわかっています。メッセージボックスが空白なのはなぜですか?

   For Each frm In CurrentProject.AllForms
         DoCmd.OpenForm frm.Name, acDesign

        mess = "Form: " & frm.Name & vbCrLf & " Allow Addition: " & CStr(frm.AllowAdditions) & vbCrLf & "Allow Deletions: " & CStr(frm.AllowDeletions) & vbCrLf & "     Allow Edit: " & CStr(frm.AllowEdits)
        MsgBox (mess)
        DoCmd.Close acForm, frm.Name, acSaveYes

  Next frm
  Set frm = Nothing

Remouのヒントを参考にして、次のことを実行しました。

  For Each frm In CurrentProject.AllForms
     DoCmd.OpenForm frm.Name, acDesign
    Set frm = Forms(frm.Name)
    mess = "Form: " & frm.Name & vbCrLf & " Allow Addition: " & CStr(frm.AllowAdditions) & vbCrLf & "Allow Deletions: " & CStr(frm.AllowDeletions) & vbCrLf & "     Allow Edit: " & CStr(frm.AllowEdits)
    MsgBox (mess)
        DoCmd.Close acForm, frm.Name, acSaveNo

  Next frm
  Set frm = Nothing
4

1 に答える 1

2

フォームを開かずにフォームのプロパティにアクセスすることはできません。Setはオブジェクトでのみ使用し、文字列では使用しないでください。

Access 2010:どのフォームコントロールがマクロを起動するかを参照してください。

For Each f In CurrentProject.AllForms
    DoCmd.OpenForm f.Name, acDesign

    Set frm = Forms(f.Name)
    mess = "Form: " & frm.Name & vbCrLf
    mess = mess & " Allow Addition: " & CStr(frm.AllowAdditions) & vbCrLf
    mess = mess & "Allow Deletions: " & CStr(frm.AllowDeletions) & vbCrLf
    mess = mess & "     Allow Edit: " & CStr(frm.AllowEdits)
    MsgBox mess

    DoCmd.Close acForm, f.Name, acSaveNo
Next
于 2012-05-24T20:54:23.067 に答える