Emptyを使うとエラーが発生する理由とは?

このQ&Aのポイント
  • Emptyを使用すると実行時エラーが発生することがあります。
  • Emptyは値が設定されていないことを表す特殊な値であり、必要なパラメーターが設定されていない場合にエラーが発生します。
  • また、Emptyを代わりに空の文字列("")にすることでエラーを回避することができます。
回答を見る
  • ベストアンサー

Emptyだとなんでダメなのでしょうか?

Sub Sample() Dim cat As ADOX.Catalog Dim clm As ADOX.Column Dim cn As New ADODB.Connection Dim myTable As String Dim SQL As String myTable = "T_会社名" Set cat = CreateObject("ADOX.Catalog") Set cn = CurrentProject.Connection cat.ActiveConnection = cn For Each clm In cat.Tables(myTable).Columns cn.Execute "UPDATE T_会社名 SET T_会社名.店名 = Replace([T_会社名]![店名],Chr(10),Empty) WHERE (T_会社名.店名=Chr(10));" Next clm cn.Close: Set cn = Nothing End Sub 上記の様に、Emptyだと 実行時エラー -2147217904 1つ以上の必要なパラメーターの値が設定されていません。 と言うエラーになります。 しかし、Emptyを""""にすると問題なく実行できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.1

Emptyはバリアント型の定数で、空文字列 "" とは異なります。 replaceでは文字列を指定します。

pgcaykyqt
質問者

お礼

ありがとうございました。

関連するQ&A

  • テーブルのすべてのフィールド名を配列として取り出せ

    テーブルのすべてのフィールド名を配列として取り出せるように変数に格納したいのですが 詰みました。 Private Sub test() Dim cat As ADOX.Catalog Dim clm As ADOX.Column Dim tmp As Variant Dim myTable As String myTable = "T_Table" Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = CurrentProject.Connection For Each clm In cat.Tables(myTable).columns tmp = Array("フィールド1", "フィールド2") Next clm End Sub のようなことがしたいのですが、clm.nameでせっかく名前が取得できるのに、 どうやったらtmpに格納できるのでしょうか? Arrayを使わない方法はあるのでしょうか?

  • ハイパーリンク型を指定することは可能ですか?

    VBAでテーブル(フィールド)を作る際にハイパーリンク型を指定することは可能ですか? Sub test() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "テーブル" tbl.Columns.Append "URL", adVarWChar cat.Tables.Append tbl Set cat = Nothing End Sub アクセスでこんな感じで作ってるのですが adVarWCharの部分をハイパーリンク型にしたいです。 しかし http://www.accessclub.jp/ado/adox/06.html を見てるとデータ型にハイパーリンク型が見当たらないのですが、不可能という事でしょうか?

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • access 最終閲覧レコードを開く

    フォームを閉じるときに表示していたレコードを次回開くときにも表示させたいのです。 データにはIDをふっているのですが、レコードの番号と同じではなく、フォームを閉じるときにIDを記録するテーブルを作成して次回オープン時に呼び出そうとしたのですが、GoToRecord を使うのではうまくいかないでしょうか? フォームを閉じるときは下のように作りました Private Sub Form_Close() Dim cat As ADOX.Catalog Dim tb As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tb = New ADOX.Table tb.Name = "T最終閲覧" tb.Columns.Append "ID", adInteger cat.Tables.Append tb Set cat = Nothing ここに     .AddNew ![ID] = [Forms]![フォーム名]![ID] .Update としています。 このデータをオープン時に生かすことができず、詰まっています レコード番号自体を記録することがきるかもわからず、どんどん後回しになってしまって何時まで経っても完成しません。 何かヒントでも構いませんのでご教授いただければと思います。

  • データ型をメモ型にして既存テーブルにフィールドを追加したい(ACCESS ADOX)

    Sub test() Dim cat As New ADOX.Catalog Dim tb As New ADOX.Table cat.ActiveConnection = CurrentProject.Connection 'テーブルを開く Set tb = cat.Tables("テーブル1") tb.Columns.Append "フィールド1", ad○○ Set cat = Nothing Set tb = Nothing End Sub これで既存のテーブルにフィールドを追加できることを知ったのですが データ型をメモ型にするにはどの「ad○○」にすればいいのでしょう? (文字数が多いためテキスト型では収まりません) オブジェクトブラウザで見ても、多すぎてどれなのかわかりません。 ご教授よろしくお願い致します。

  • VBAのデバックをどなたかお手伝いください。

    もちろん自分でも調べてはいるのですが、急いでいるため、もしどなたか教えてくだされば大変助かります。 この(下記の)Then 以降からがわかりません。 Do Until rs.EOF '該当レコードあり If rs!MCD = "3162" Then '--------------------------------------------- strcriteria = "CAT = '" & rs!CAT & "'" ' --- A rs2.Find strcriteria, 0, adSearchForward If rs2.EOF Then ' Else rs!仕入単価世代1 = rs!仕入単価 rs!仕入単価 = rs2!discount End If '--------------------------------------------- rs!更新日 = Now() rs.Update End If 情報が不足していればお答えします。どうぞ宜しくお願いいたします。 (補足)これより前に入力されているのは以下のものです。 Dim cn As ADODB.Connection Dim cn2 As ADODB.Connection Dim rs As ADODB.Recordset Dim rs2 As ADODB.Recordset Dim strmsg As String Dim lngRet As Long Dim strcriteria As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset Set cn2 = CurrentProject.Connection Set rs2 = New ADODB.Recordset rs.Open "商品2_T", cn, adOpenKeyset, adLockOptimistic rs2.Open "商品2_T25discountてすと", cn2, adOpenKeyset, adLockOptimistic

  • ADOX フィールドのRequiredプロパティを

    ADOX フィールドのRequiredプロパティをFalseにしたい アクセスです。 Sub test() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim idx As ADOX.Index Dim varRet As Variant Dim strMsg As String Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "test" tbl.Columns.Append "氏名ID", adInteger '手作業で数値型のフィールドを作るとこれがデフォルトになる tbl.Columns.Append "氏名", adVarWChar, 50 cat.Tables.Append tbl 主キーを作る Set idx = New ADOX.Index idx.Name = "Primary" idx.PrimaryKey = True idx.Columns.Append "氏名ID" tbl.Indexes.Append idx MsgBox tbl.Name & "テーブルを作成しました。" Set cat = Nothing End Sub ********************************************************** 上記のコードでテーブルを作ると、RequiredをTrueにしてないのに、 実際にテーブルにデータを入れてる時に、NULLにしようとすると、 ********************************************************** フィールドに必要なプロパティが True に設定されているため、 このフィールド '<フィールド名>' には Null 値は挿入できません。値を入力してください。 ********************************************************** となります。 Requiredプロパティの規定値は、False になってますが、 なぜか値を要求されてしまいます。 ADOXで上記のコードに追加してRequiredをFalse にする方法を教えてください。、

  • エクセルからMySQL

    すみません、エクセルからMySQLのテーブル作成をしたいのですが、うまくいきません。 --------------------------------------------------------- Sub aaa() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim cnn As New ADODB.Connection Set cat = New ADOX.Catalog cat.ActiveConnection = "provider = MSDASQL.1;data source=test;" cnn.Open "Provider=MSDASQL.1;Data Source=test;" Set tbl = New ADOX.Table tbl.Name = "aaa" Set tbl.ParentCatalog = cat With tbl .Columns.Append "ID", 4 .Columns.Append "名前", 4 End With End Sub ----------------------------------------------------------- エクセルからACCESSへの接続の参考ホームページを見ながらやっているので、MySQLの場合これであっているのか分からないです。実行してもエラーがでないのですが、確認してみるとテーブルが作成されていないです。どなたか分かる方教えてください。お願いします。 上のコードは、MySQLの【test】というデータベースに【aaa】というテーブルを作成するというつもりで書いているのですが、間違っていますでしょうか?

  • アクセスのインポートエラー 続き

    先ほど、質問しました続きです。以下のVBAを作成しましたが、うまくいきません。助言お願いします。 Option Compare Database Private Sub 実行_Click() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim strName As String Dim i As Long strName = "エラー" i = 0 Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection For Each tbl In cat.Tables If tbl.Name = strName Then i = 1 If MsgBox(tbl.Name & "テーブルを削除しますか?", _ vbYesNo) = vbYes Then cat.Tables.Delete tbl.Name MsgBox tbl.Name & "テーブルの削除を完了しました。" End If Next tbl If i <> 1 Then MsgBox strName & "テーブルが存在しません。" Set cat = Nothing End Sub

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

専門家に質問してみよう