2017-03-22 18 views
0

私のサーバー上のブックからすべてのデータをコピーし、valuesB2に別のブックに貼り付けようとしています。すべてをブック2からコピーし、ブックに貼り付けます

これはこれまで私が行ってきたことです。これは、ブック2に私をもたらしますが、私はあなたがすべての詳細

を提供していないとして、ブックに1

Sub UpdateTSOM() 
    Application.ScreenUpdating = False 
    Dim LastRow As Long 
    Dim StartCell As Range 

    Set sht = Sheet5 
    Set reportsheet = Sheet5 
    Set StartCell = Range("B2") 

    'Refresh UsedRange 
    Worksheets("TSOM").UsedRange 

    'Find Last Row 
    LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    'Select Range 
    sht.Range("B2:B" & LastRow).Select 
    With Range("B2:B" & LastRow) 

     If MsgBox("Clear all Transmission Stock data?", vbYesNo) = vbYes Then 

      Worksheets("TSOM").Range("B2:N2000").ClearContents 

      MsgBox ("Notes:" & vbNewLine & vbNewLine & _ 'This is not needed if I can automate the copy and paste. 
      "Copy ALL" & vbNewLine & _ 
      "Paste as Values") 
     End If 
    End With 
    Workbooks.Open "P:\ESO\1790-ORL\OUC\_Materials\Stock Status\Transmission Stock Status **-**-**.xlsx" 
    ThisWorkbook.Activate 

    reportsheet.Select 
    Range("B2").Select 

    whoa: 'If filename changes then open folder 
    Call Shell("explorer.exe" & " " & "P:\ESO\1790-ORL\OUC\_Materials\Stock Status", vbNormalFocus) 
    Range("B2").Select 
    Application.ScreenUpdating = True 
End Sub 

おかげ

答えて

0

これは私が働くことです。選択されたファイルフォルダを開き、そこからすべてのデータを現在のワークブックにコピーします。次に、拡張子のないファイル名でB1(私のヘッダ)と名前をつけます。

Sub UpdateTSOM() 
Application.ScreenUpdating = False 
Dim vFile As Variant 
Dim wbCopyTo As Workbook 
Dim wsCopyTo As Worksheet 
Dim wbCopyFrom As Workbook 
Dim wsCopyFrom As Worksheet 
Dim s As String 

Set mycell = Worksheets("TSOM").Range("B1") 
Set wbCopyTo = ActiveWorkbook 
Set wsCopyTo = ActiveSheet 

If MsgBox("Update transmission Stock Status data?", vbYesNo) = vbYes Then 
Worksheets("TSOM").Range("B2:N3000").ClearContents 
Else: Exit Sub 
End If 

'Locate file to copy data from 
vFile = Application.GetOpenFilename("Excel Files (*.xl*)," & _ 
"*.xl*", 1, "Select Excel File", "Open", False) 

'Assign filename to Header 
s = Mid(vFile, InStrRev(vFile, "\") + 1) 
s = Left$(s, InStrRev(s, ".") - 1) 
mycell.Value = s 

Set wbCopyFrom = Workbooks.Open(vFile) 
Set wsCopyFrom = wbCopyFrom.Worksheets(1) 

'Copy Range 
wsCopyFrom.Range("A1:N3000").Copy 
wsCopyTo.Range("B2").PasteSpecial Paste:=xlPasteValues, _ 
Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

SendKeys "Y" 
SendKeys ("{ESC}") 

'Close file that was opened 
wbCopyFrom.Close SaveChanges:=False 
Application.Wait (Now + 0.000005) 
Call NoSelect 
Exit Sub 

End Sub 
+0

なぜあなたは 'SendKeys'を使用していますか? –

+1

また、 's = Mid(vFile、InstrRev(vFile、" \ ")、+ 1)の代わりに' s = Dir(vFile) 'を実行してください。 –

+0

私の 'sendkeys'は、可能な"大きなコピー "ポップアップボックスを閉じるのに使われます。とにかくその周り@DavidZemens? –

1

いくつかの推測

を貼り付け、手動ですべて選択してコピーする必要があります
Sub UpdateTSOM() 

Application.ScreenUpdating = False 

Dim LastRow As Long 
Dim StartCell As Range 
Dim sht As Worksheet 
Dim wb As Workbook 

Set sht = Sheet5 
Set StartCell = sht.Range("B2") 

'Find Last Row 
LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

If MsgBox("Clear all Transmission Stock data?", vbYesNo) = vbYes Then 
    Worksheets("TSOM").Range("B2:N2000").ClearContents 
End If 

Set wb = Workbooks.Open("P:\ESO\1790-ORL\OUC\_Materials\Stock Status\Transmission Stock Status **-**-**.xlsx") 
wb.Sheets(1).UsedRange.Copy 
StartCell.PasteSpecial xlValues 

Application.ScreenUpdating = True 

End Sub 
1

SendKeysを避け、そしてあなただけの値を貼り付けされているので、あなたはCopyまたはPaste/PasteSpecialのいずれかを使用する必要はありません。ここで

With wsCopyFrom.Range("A1:N3000") 
    wsCopyTo.Range("B2").Resize(.Rows.Count, .Columns.Count).Value = .Value 
End With 

を別のファイルから値をコピーするには、いくつかの他の方法があります。

Copy from one workbook and paste into another

関連する問題