2017-06-02 20 views
1
Sub VBA_Read_External_Workbook() 
'''''Define Object for Target Workbook 
Dim Target_Workbook As Workbook 
Dim Source_Workbook As Workbook 
Dim Target_Path As String 

'''''Assign the Workbook File Name along with its Path 
'''''Change path of the Target File name 
Target_Path = "C:\Users\User\Desktop\Excel VBA\Working Sample Folder\MAY 2017 Summary- Atlas work.xlsx" 
Set Target_Workbook = Workbooks.Open(Target_Path) 
Set Source_Workbook = ThisWorkbook 

'''''With Target_Workbook object now, it is possible to pull any data from it 
'''''Read Data from Target File 
Target_Data = Target_Workbook.Sheets(1).Range("A1:B3") 
Source_Workbook.Sheets(2).Range("A1:B3") = Target_Data 


'''''Update Target File 
Source_data = Source_Workbook.Sheets(1).Range("A1:B3") 
Target_Workbook.Sheets(1).Range("A1:B3") = Source_data 


'''''Close Target Workbook 
Source_Workbook.Save 
Target_Workbook.Save 
Target_Workbook.Close False 

'''''Process Completed 
MsgBox "Task Completed" 
End Sub 

特定のデータを特定の形式でコピーするために、このWebサイトにあるこのコードを変更しました。 私はいくつかの指針が必要なのは、ループを追加して、フォルダに入れるファイルからデータを取得することです。 Files that needed to be read別のワークブックから特定のデータを取得するExcel VBA

だから私の質問

  1. は基本的に、私はすでに先のファイルにコピー&ペーストするために必要なデータの特定の範囲を設定します。しかし、目標のパスを変更し続けるのではなく、次のワークブックに自動的にジャンプしてそれらの値を取得するループを入れる方法はありますか?

  2. このメソッドを使用してデータを転送すると、データの性質が転送されないことがわかりました。たとえば、ソースファイルで時刻形式である場合、VBAで宛先ファイルを実行および更新する場合、値は同じ形式ではなく、すべてが一般形式で貼り付けられます。

  3. データを貼り付けるために自動的に次の行にジャンプする更新をループすることはできますか?

私はVBAコードのいくつかをGoogleにしようとしましたが、答えは非常に曖昧です。

あなたの経験から得た情報を心より感謝します。

答えて

2

1)基本的には、コピー先のファイルにコピーして貼り付けるために必要なデータの範囲を設定しています。しかし、目標のパスを変更し続けるのではなく、次のワークブックに自動的にジャンプしてそれらの値を取得するループを入れる方法はありますか?

これは、私はそれが時間内であればデータを転送するために、このメソッドを使用して、それは例えば、データの本質を転送していないことが判明)

Dim MyFolder As String 
Dim StrFile As String 
Dim flName As String 

'~~> Change this to the relevant folder 
MyFolder = "c:\MyFolder\" 
StrFile = Dir(MyFolder & "*.xls*") 

'~~> Loop through all excel files in the folder 
Do While Len(StrFile) > 0 
    flName = MyFolder & StrFile 

    '~~> Open the workbook 
    Set wb = Workbooks.Open(flName) 

    ' 
    '~~> Rest of your code 
    ' 

    wb.Close (False) 

    StrFile = Dir 
Loop 

2を始めるだろうVBAが宛先ファイルを実行して更新するとき、値は同じ形式ではなく、すべてが一般形式で貼り付けられます。

コードは直接値を設定しているため、フォーマットはコピーされません。直接値を設定するのではなく、.Copy.Pastespecialが必要です。マクロを記録して、.Copy.Pastespecialの仕組みを確認してください。または上に読み

Range.PasteSpecial Method (Excel)

3)それはそれは次の行への自動ジャンプは、データを貼り付けます更新がループすることは可能ですか?

最後の行を見つけて、その行にコピー貼り付けを行います。最後の行を見つけるには、下のリンクを参照してください。

Finding Last Row

0

サブVBA_Read_External_Workbook()

'''''Define Object for Target Workbook 
Dim Target_Workbook As Workbook 
Dim Source_Workbook As Workbook 
Dim Target_Path As String 
Dim MyFolder As String 
Dim StrFile As String 
Dim flName As String 

'~~> Change this to the relevant folder 
MyFolder = "C:\Users\User\Desktop\Excel VBA\Working Sample Folder" 
StrFile = Dir(MyFolder & "*.xlsx*") 

'~~> Loop through all excel files in the folder 
Do While Len(StrFile) > 0 
flName = MyFolder & StrFile 

'~~> Open the workbook 
Set wb = Workbooks.Open(flName) 

'''''Assign the Workbook File Name along with its Path 
'''''Change path of the Target File name 
Target_Path = "C:\Users\User\Desktop\Excel VBA\Working Sample Folder\Sample Source Files.xlsx" 
Set Target_Workbook = Workbooks.Open(Target_Path) 
Set Source_Workbook = ThisWorkbook 

'''''With Target_Workbook object now, it is possible to pull any data from it 
'''''Read Data from Target File 
Target_Data = Target_Workbook.Sheets(2).Range("A1:D10") 
'''''Target Paste range 
Source_Workbook.Sheets(1).Range("A1:D10") = Target_Data 

'''''Update Target File 
Source_data = Source_Workbook.Sheets(1).Range("A1:D10") 
Target_Workbook.Sheets(2).Range("A1:D10") = Source_data 

'''''Close Target Workbook 
Source_Workbook.Save 
Target_Workbook.Save 
Target_Workbook.Close False 

'''''Process Completed 
MsgBox "Task Completed" 

wb.Close (False) 

StrFile = Dir 

ループ

End Subの

親愛なる@SiddharthRout、 私はループに入り、マクロを実行した後、何も起こりませんでした。たぶん私はコードの何かを逃している?

関連する問題