2012-02-28 10 views
1

(これはAccess 2003にあります) インポートするファイルのパスと名前を入力できるフォームを開くマクロを作成しています。次に、フォームを閉じ、指定されたファイルにデータをインポートします。フォームとユーザー入力を適切に開くコードがあります。私はパスとファイル名を取得すると、データのインポート/操作を行うコードもあります。マクロでフォームにユーザーが入力した情報を使用します

私の質問は、フォームを閉じた後、マクロ/その他のサブフォームに入力した情報をどのように使用するのですか?

ここに私のフォームのコードの簡易版(「インポート情報を入力します」)です:

Option Compare Database 
Option Explicit 

Sub RunButton_Click() 

    FilePathTextBox.SetFocus 
    DataPath = FilePathTextBox.Text 
    FileNameTextBox.SetFocus 
    DataName = FileNameTextBox.Text 

    DoCmd.Close 

End Sub 

ここでは(失敗した)私のマクロの試みの簡易版です。

Option Compare Database 
Option Explicit 
Option Base 1 

Public DataPath As String 
Public DataName As String 
Public CompleteName As String 

Function StartImport() 

    'Open form to let user enter import file info 
    DoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog 

    'Get complete file path/name. I think this is where the problem is. 
    CompleteName = DataPath & "\" & DataName 

    'Import 
    ImportData 

    'Data clean up 
    DataCleanup 
End Function 


Function ImportData() 

    'Import CompleteName 
    'The import code here works fine when CompleteName has the right info 

End Function 

Sub DataCleanup() 

    'cleans up the data as needed (using DoCmd.RunSQL). Works fine. 

End Sub 

は、私はより多くを費やしたが、 2時間以上はインターネットで解決策を探していたが、見つけられなかった。友人は、フォームに入力された値を文字列として格納するために一時テーブルを作成することを提案しています(テーブルには1つのフィールドと1つのレコードしかありません)。しかし、私はテーブルから文字列としてそれを取得する方法を知らない。

非常に長い投稿のため申し訳ありません - 私はできるだけ明確になりたかったです。 あらかじめご協力いただきありがとうございます!

==============編集(追加情報)

形で元のコードを手動でパスとファイル名を入力するようユーザに要求します。それ以来、コード全体が機能していました。

しかし、私はパスと名前を決定するためにFileDialogを使用することで間違いやエラーを避けたかったので、テキストボックス(FileNameTextBox_ClickとFilePathTextBox_Click)がクリックされたときに呼び出されるsubsを作成しました。 FileNameTextBox_Click()のコードは、ここにあります:FileDialog doesn't work

何かに影響しますか?

+1

私はこれとトニーと一緒です。それは私のためにうまく動作します。 DatapathとDatanameを他の場所に宣言していないと確信していますか?さて、cntrolsのtextプロパティを使用しないで、フォーカスを設定する必要がない場合、いくつかの段階で悲しみにつながります。ただ 'DataPath = Me.FilePathTextBox'と言う - 私は名前の混乱を避けるために重要です。プロパティが必要な場合は、コントロールにフォーカスがない場合でも使用できる '.value'を使用してください。 – Fionnuala

答えて

0

私はあなたのコードが失敗することはできないとのコメントを投稿しました。私はあなたと同じようにすべてをやるべきだと思った。私は名前のいくつかを変更すると違いが生じたのはなぜ分かりますか?

RunButton_Click

Debug.Print "Form " & DataPath    ) Check values are stored 
Debug.Print "Form " & DataName    ) 

' Close form and nothing else. 
DoCmd.Close objecttype:=acForm, objectname:="Enter Import Info" 

Module1の

後:

あなたの名前とあなたのコードを使用して、私は次のように変更してモジュールに戻され、パスとファイル名を得ましたDoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog

Debug.Print "Module " & DataPath   ) Check have values 
Debug.Print "Module " & DataName   ) 
+0

私は、テキストプロパティではなく値を使用する唯一の変更で提供されたコードを実行してくれました。 'CompleteName'には完全なパスが含まれていました。 – Fionnuala

+0

私は質問の投稿にいくつかの情報を追加しましたが、それが何かに影響するかどうかはわかりませんが、あなたか@Remouが見ていただければ幸いです!また、いくつかの行を追加してマクロを実行しようとしましたが、「あいまいな名前が検出されました:DataPath」というコンパイルエラーが発生し、RunButton_ClickのDataPathが強調表示されました。 – Emily

+0

あいまいな名前は、DataPathが複数回宣言されたことを意味します。 VB Editor内で、「Ctrl + F」をクリックしてFindにアクセスします。現在のプロジェクト内のDataPathを検索します。 'RunButton_Click()'のスコープ内にある2つ以上の宣言があるはずです。 –

関連する問題