こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テキスト取込からのデータ取込編集エラーについて

ACCESS97でインポートしたテキストを文字を変換させて新しく修正したテキストを
作成したい流れですがエラーになります。
ご教授お願いします。

ユーザー定期型は定義されていません。
↓チェックとを入れると
Microsoft DAO 3.6 Object Library
↓下記のエラーになります
この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。


Private Sub cmd選択_Click()
Dim objExcel As Object
Dim varFilePath As Variant
Dim bln As Boolean
Dim infname As String
Dim TName As String


TName = "取込用"

Call F_ExecuteSQL("DELETE FROM " & TName & "")

Set objExcel = CreateObject("Excel.Application")

varFilePath = objExcel.GetOpenFileName("Microsfot Access (*.txt), *.txt", , "txt選択")
If varFilePath <> False Then
infname = varFilePath

DoCmd.TransferText acImportDelim, "取込定義", TName, infname, True
Call Div
MsgBox "修正したデータを正常出力しました。"

End If

Set objExcel = Nothing
End Sub
Private Sub Div()
Dim infname As String
Dim outfname As String
Dim n_in As Integer
Dim n_out As Integer
Dim tmpREC As typREC
Dim tmpSP As typSpace
Dim tmpNL As typNewLine
Dim tmpStr As String

outfname = myReplaceB(infname, ".txt", ".r.txt")

n_out = FreeFile()

Open outfname For Output As #n_out

n_in = FreeFile()

Open infname For Binary As #n_in
Get #n_in, , tmpNL
Do Until EOF(n_in)
Get #n_in, , tmpREC
tmpStr = myReplaceB(tmpREC.REC400, Chr(0), "")
Print #n_out, tmpStr
'datファイルが改行されてる場合は改行コードを読み捨て
Get #n_in, , tmpSP
Get #n_in, , tmpSP
Get #n_in, , tmpSP
Get #n_in, , tmpSP
Loop
Close #n_in

Close #n_out
End Sub
Function myReplaceB(ByVal myString, ByVal myFind, ByVal myRp)
'Access2000風 replace関数 (Access97、Excel97用)
'「大文字小文字半角全角カタカナひらがな」を区別する 2003/10/11 pPoy
Dim strTmp As String
Dim wk1 As Integer, wk2 As Integer
Dim wk3 As Integer, wk4 As Integer

'準備
If IsNull(myString) Then Exit Function
If IsNull(myFind) Then Exit Function

wk4 = Len(myFind) '検索する文字数
wk3 = Len(myString) '検索対象の文字数
'最初に見つかった位置
wk2 = InStr(1, myString, myFind, vbBinaryCompare)
wk1 = 1 '検索開始位置

'無ければそのまま
If wk2 = 0 Then
myReplaceB = myString
Exit Function
End If

'文字の最後まで置換
Do
strTmp = strTmp & Mid(myString, wk1, wk2 - wk1) & myRp
wk1 = wk2 + wk4
wk2 = InStr(wk1, myString, myFind, vbBinaryCompare)
Loop Until wk2 = 0

strTmp = strTmp & Mid(myString, wk1, wk3)
myReplaceB = strTmp
End Function

投稿日時 - 2011-09-04 20:35:11

QNo.6989480

すぐに回答ほしいです

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

>Call F_ExecuteSQL("DELETE FROM " & TName & "")

の F_ExecuteSQ が関数として設定されているならば、
という条件で、コンパイルして、エラーがでなければ
実行できるはずです。
関数が設定されていないならばNo1のような方法で
簡単に実行できるはずです。

(1)、(2)、(3)以外の他の部分については
エラーが出るのか確認はしていませんが。

投稿日時 - 2011-09-04 22:38:37

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

(1)
>この名前は既にあるモジュール、プロジェクト、
>オブジェクトライブラリで使われています。

Access 97 ではDAOのバージョンは3.5で、
すでに設定してあるものと思われますが。
参照設定で確認してみてください。


(2)

>Call F_ExecuteSQL("DELETE FROM " & TName & "")

F_ExecuteSQLという関数はどこにも見当たりませんが
どこか標準モジュールにでも定義されているのですか。


(3)
わざわざDAOを設定するならば、

"DELETE FROM " & TName & ""

をSQL文とすると、もしこのSQL文を実行
したいのなら、変数宣言で

Dim db As Database

として、さらに

Set db = DBEngine.Workspaces(0).Databases(0)

として、

db.Execute("DELETE * FROM " & TName & "")

と実行し、

最後に、
db.Close : Set db = Nothing

とするのが普通だと思いますが。

投稿日時 - 2011-09-04 21:57:36

補足

(2)すいません。モジュールは伐採しております。
(3)ご指摘ありがとうございます。初心者なのでネットから集めたのを
色々混ぜて作ったのですが、やはり普通とは違いますよね・・・

ご指摘ありがとうございます。
ちなみに(1)ですが3.5を設定していればこのコードは出来ますでしょうか?

すいません。変なご質問で

投稿日時 - 2011-09-04 22:22:36

あなたにオススメの質問