2016-09-16 10 views
0

特定のレポートを頻繁に実行してから、VBAユーザーフォームに約30のフィールドを手動で入力する必要があります。彼らは最近このレポートを入手したサイトを更新しました。そこで、この特定のレポートをExcelファイルで提供しています。外部Excelファイルからデータを読み取る

私がしたいことは、ファイルを検索できるユーザーフォームに参照ボタンを追加してから、データフィールドを自動的に入力することです。私はVBA(または少なくとも使用されていた)にはかなり便利ですが、ここではこの特定の問題についてはあまりよく分かりません。誰かが手を差し伸べることを望んでいた!

おかげ

+0

ここで少し明確にする必要があります。ファイルのデータフィールドの場所はわかりますか?もしそうなら、あなたのボタンに 'Workbooks.Open'を実行させて、必要なものを取り出し、閉じ、calcなどを行います。ユーザがファイルを指定するようにしたい場合は、 'Application.FileDialog(msoFileDialogFilePicker)'コマンドを見て問題のファイルを選択させますか?あなたが努力を投稿し、あなたが最初にそれを解決しようとしていることを示すなら、一般的にあなたはここで助けられる可能性が高いです。 – Dave

+0

あなたは実際に「ここでの特定の問題」を述べていません。 –

+0

申し訳ありませんが、私は実際に私のためにこれを行う人を探していなかった!正しい方向にプッシュしたいだけでした。FileDialogコマンドを見てみましょう。これは私が探しているようです。ありがとう – ct4242

答えて

0
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _ 
      & "Data Source='C:\Path\To\Workbook.xlsm';" _ 
      & "Extended Properties=""Excel 8.0;HDR=YES;"";" 

strSQL = "SELECT * FROM [Sheet1$]" 

あなたは、Excelファイルに対して直接問い合わせることができます。私は、ファイルが完全に動作するためには、「きれいにする/きちんと整えた」必要があるかもしれないと付け加えます。いずれにせよ、これが助けになるはずです。

編集これは最初にダウンロードしたものです。私は、ファイルフォームを最初に取得してからそれをクエリすることを自動化するために遊ぶ必要があります。

0

私は他のブックで頻繁に仕事をしなければならないと、私は次のようにします。私はそのワークブックには何もアクセスしたいとき

Dim reportBookPath As String 
Dim reportwb As Workbook 

reportBookPath = "C:\Users\......\filename.xlsx" 
Set reportwb = Workbooks.Open(Filename:=reportBookPath) 
reportwb.Application.Visible = False 

はその後、それはやってするだけです:

valueDesired = reportwb.Worksheets("Desired Sheet").Cells(row,column).Value 

これを使用してダイナミックファイル名のワークブックを開くには、ワークブック名​​にある種のパターンを設定する必要があります。それがあれば、正規表現を使って適切なワークブックを開くことができます。あなたが希望これを行うには:

Dim objFSO As Object 
Dim objFolder As Object 
Dim objFile As Object 
Dim shiftRegExp As RegExp 
Dim strPattern As String 
Dim pathToFile As String 

次の行を:

strPattern = "[S|s]hift(?)1(?)\.xlsx$" 

は、このコードのすべての本当の強力な部分があります。この特定の正規表現は、次のいずれかで終了するファイル名に適用されます。

shift1.xlsx; 1.xlsxをシフトする。 shift1。 xlsx;シフト1 .xlsx; Shift1.xlsx;シフト1.xlsx。 Shift1 .xlsx; Shift 1 .xlsx

this linkを使用して、独自の正規表現をテストすることができます。

Set shiftRegExp = CreateObject("vbscript.regexp") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("C:\Users\....\workbook directory") 

With shiftRegExp 

.Global = True 
.MultiLine = True 
.IgnoreCase = False 
.Pattern = strPattern 

End With 

あなたは、あなたの正規表現にマッチするファイルを見つけるまで、あなたの選択したディレクトリ内のすべてのファイルを反復することにより、正規表現を利用します。明らかに、あなたの正規表現に一致する複数のファイルがある場合、問題が発生します。

For Each objFile In objFolder.Files 

If shiftRegExp.test(objFile.Path) Then 
    pathToFile = objFile.Path 
    Exit For 
End If 

Next objFile 
+0

私はまだ動的にファイルパス名を取得する必要があります、私はApplication.FileDialog(msoFileDialogFilePicker)コマンドを使用していると仮定しています。私はこのコマンドに精通していません。思考? – ct4242

+0

@ ct4242、私は私の答えに上記を追加しました。あなたの状況が許せば、正規表現はあなたの問題を解決することができます。 – James

関連する問題