1

私はアクセスやプログラミングの専門家ではありません。だから、私の質問はちょっとばかげているだろうとかなり確信しています..それでも、私はあなたの助けが必要なので..私はあえて来て尋ねました:)

つまり、これが重要です。閉じたときに、VBAコードを介して以前に作成したテーブルにいくつかのレコードを挿入および更新するフォームがあります。このようなタスクを実行するために私が知っている限り近いコードを作成しましたが、VBAコンパイラから「オブジェクト変数またはブロック変数が設定されていません」というエラーメッセージ「91」を受け取り続けています。

誰かがこの問題で私を助けることができますか?事前に感謝します。私が使用している完全なコードは次のとおりです。

Private Sub Form_Close()
Dim dbs As Database
Dim rst As recordSet
Dim auxGastoId, auxFecha
Dim auxReg

DoCmd.Echo False
DoCmd.SetWarnings False

DoCmd.OpenQuery "SueldosNuevoRegistroConsulta"

DoCmd.SetWarnings True
DoCmd.Echo True

auxGastoId = DMax("id_gasto", "Gastos")
auxFecha = DLookup("fecha_gasto", "Gastos", "id_gasto = " & auxGastoId)

Set db = CurrentDb()
Set rst = db.OpenRecordset("Empleados", dbOpenDynaset)

rst.MoveFirst

Do While rst.EOF = False

If (Me.nombre_completo <> Null) Then
  If (Me.sueldo <> 0) Then
    dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

    auxReg = DMax("id_gasto_detalle", "SueldosTempo")

   dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _ 
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET servicio = ""Sueldo (" & _
       Me.nombre_completo & ")"" WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _ 
       Me.sueldo & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"

 ElseIf (Me.bono <> 0) Then
   dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

   auxReg = DMax("id_gasto_detalle", "SueldosTempo")

   dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET servicio = ""Bono (" & _
       Me.nombre_completo & ")""  WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _
       Me.bono & " WHERE id_gasto_detalle = " & auxReg & ";"
   dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"

   ElseIf (Me.hrExtra <> 0) Then
     dbs.Execute "INSERT INTO SueldosTempo (fecha_gasto) VALUES (" & _
       auxFecha & ");"

     auxReg = DMax("id_gasto_detalle", "SueldosTempo")

     dbs.Execute "UPDATE SueldosTempo SET id_gasto = " & _
       auxGastoId & " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET cantidad = " & "1" & _
       " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET servicio = ""HrExtra (" & _
       Me.nombre_completo & ")""  WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET monto_servicio = " & _
       Me.hrExtra & " WHERE id_gasto_detalle = " & auxReg & ";"
     dbs.Execute "UPDATE SueldosTempo SET fecha_gasto = " & _
       auxFecha & " WHERE id_gasto_detalle = " & auxReg & ";"
  Else
  End If
  Else
  End If

  rst.MoveNext

  Loop

  dbs.Close

  Set rst = Nothing
  Set db = Nothing

  End Sub
4

1 に答える 1

2

Set db = CurrentDb()この行を変更することで問題を解決できると思います。 set dbs = CurrentDb()

Option Explicitそして、モジュールの最初の行として追加します。

dbs.close値を割り当てないため、エラーが発生していdbsます。

これを書いているときに明示的なオプションを有効にした場合、IDEはコンパイルエラーをスローして、dbが定義されていないことを通知します。

編集:

また、に変更db = nothingdbs = nothingます。

于 2012-08-28T22:34:19.000 に答える