2017-05-23 22 views
0

Microsoft Access 2010でSharePoint Webサイトにアップロードするフォームを作成しています(初めてこれを行う)。私はコマンドボタンを持つフォームを持っています。私は2つのことをしたい、すべての単一の値の項目を1つのテーブルに挿入し、リストボックスのすべての選択を別のテーブルに挿入します。Microsoft Access VBAマルチセレクトリストボックス挿入クエリ

"DoCmd.OpenQuery 'Add Goal'を最上部に配置すると、単一の値アイテムが完全に追加されますが、コードを底に置くと、何もしない。どちらの場合でも、リストボックスの項目は2番目のテーブルに追加されません。ここに私のコードです:

Private Sub cmdAddGoal_Click() 
    On Error GoTo cmdAddGoal_Click_Err 

    Dim strSQL As String 
    Dim vItem As Variant 

    If IsNull(lstIndAcc) Then 
     Exit Sub 
    End If 

    With Me.lstIndAcc 
     For Each vItem In .ItemsSelected 
      If Not IsNull(vItem) Then 
       strSQL = "INSERT INTO Individuals_Accountable (Goal_ID, Employee_ID)" _ 
       & "SELECT Goal_ID, Employee_ID FROM Goal, Employee WHERE Goal.Activites_And_Milestones = [Forms]![Add Goal]![txtActivities] AND" _ 
       & "Employee.Employee_Name = " & vItem 
      End If 
      DoCmd.OpenQuery strSQL 
     Next 
    End With 
    DoCmd.OpenQuery "Add Goal" 

    cmdAddGoal_Click_Exit: 
    Exit Sub 

    cmdAddGoal_Click_Err: 
    MsgBox Error$ 
    Resume cmdAddGoal_Click_Exit 

End Sub 
+1

私はSQLが何かをしているのに驚いています。また、Employee_Nameがテキストフィールドの場合、アポストロフィデリミタが必要です: '= '"&vItem& "'" ' – June7

+0

私の申し訳ありません明確にすると、forループ内のSQLは機能しません(少なくとも私はまだ分かりません)。 "Add Goal"クエリは、変数の宣言の前に置くと機能しますが、上に示したように最後に置いた場合は機能しません。あなたが提案した変更を加えましたが、コマンドボタンを押しても何も起こりません。 – aashir272

+0

なぜ問合せオブジェクトを開くのですか? – June7

答えて

0

申し訳ありませんが、私はコメントする前にコードを詳しく見ていたはずです。

OpenQueryは、VBAで構築されたSQL文を実行するのではなく、クエリオブジェクトを開くために使用されます。

使用DoCmd.RunSQL strSQLまたは私はあなたにも警告を無効にするためのコードを持っていない限りCurrentDb.Execute strSQL

最初は警告ポップアップを生成します好みます。

DoCmd.SetWarnings False 
DoCmd.RunSQL strSQL 
DoCmd.SetWarnings True 
+0

それは働いた!いくつかの基本的なデバッグをしなければならなかったが、それを把握することができた。ありがとうございました! – aashir272

+0

答えで問題が解決された場合は、受け入れ可能とマークできます。 – June7

関連する問題