2012-01-09 7 views
0

私のExcelシートでは、外部シートを参照する式を使用しています。 E7のセルの値を手動で変更する代わりに、外部シートの名前を挿入するマクロを作成し、参照値をE7に変更し、生成された値をコピーします。excel files loop

残念ながら私のコードは動作しません - エクセルは外部シートの値を見ることができません。 変更する必要はありますか?


Sub lista_plik() 
    Dim oExcel As Excel.Application 
    Dim oWB As Workbook 
    Set oExcel = New Excel.Application 
    folder = "path_here" 
    folder2 = folder & "*.xlsx" 

    arkusz = Dir(folder2) 

    Do While arkusz <> "" 
     x = x + 1 
     Range("E7").Value = Replace(arkusz, ".xlsx", "") 
     arkusz = folder & arkusz 

     Set oWB = oExcel.Workbooks.Open(arkusz) 
'''''''''''''''''''' 
HERE CODE TO COPY VALUES 
''''''''''''''''''''''' 
     oWB.Close 
     arkusz = Dir 
    Loop 
End Sub 
+0

あなたがやろうとしていること、そしてあなたがここで欠けていることは(少なくとも私には)明らかではありません。 'E7'はあなたが開く新しいワークヌーク名(シートではない)ごとに更新され、上書きされます。どの値をコピーしたいですか?そして同じシート、新しいシートなどに?詳細情報を投稿してください – brettdj

+0

同じExcelセッションで他のwbを開いてみませんか?また、関連するワークブックですべてのRange()を修飾する必要があります。そうしないと混乱が生じます。 –

答えて

0

あなたはVBAでこれを実行している場合は、Excwlのインスタンスを宣言する必要はありません。

Sub lista_plik() 
    Dim oWB As Workbook 
    Dim oWs As Worksheet 
    Set oWs = ActiveSheet 

    folder = "path_here\" 
    folder2 = folder & "*.xlsx" 

    arkusz = Dir(folder2) 

    Do While arkusz <> "" 
     x = x + 1 
     oWs.Range("E7").Value = Replace(arkusz, ".xlsx", "") 
     arkusz = folder & arkusz 

     Set oWB = Application.Workbooks.Open(arkusz) 
'''''''''''''''''''' 
'HERE CODE TO COPY VALUES 
''''''''''''''''''''''' 
     oWB.Close 
     arkusz = Dir 
    Loop 
End Sub 

注:に変更し、私はあなたに参照のうえいるE7セルをワークブックたentierlyわからないんだけど、ここで私は、アクティブなブックにそのを前提としています。

2

私はbrettdjに同意します。あなたが達成しようとしていることを知るのは難しいです。

Chrisは2つのエラーを修正しましたが、問題の原因と思われる2番目の修正については説明しません。

コードにRange("E7").Valueを使用してください。これは、アクティブブックのアクティブシート内のセルE7を参照します。 Chrisはこれを改善したoWS.Range("E7").Valueに変更しましたが、初期化されていないため、十分ではありません。

複数のワークブックで作業してきた経験から、完全に管理しておく必要があります。私はあなたのエラーがExcelが間違ったE7を見ていると思う。以下の手順では、それと同様のエラーはなくなります。

ステップ1

WorkBooks.Count = 1ことを確認することで初めにオープン一つだけのブックがあることを確認してください。 2つ以上のワークブックを開くことができる場合は、アクティブなワークブックが必要なものであることを確認するコードが必要になります。だから、のようなもの:マスターワークブックで2

あなたが他のブックを開く前に

If WorkBooks.Count > 1 Then 
    Call MsgBox("Please close other workbooks then try again.", vbYesOnly) 
    Exit Sub 
End If 

ステップ、記録。

Dim WBkMaster As WorkBook 

WBkMaster = ActiveWorkBook 

ステップ3

常に明示的ワークブックおよびワークシートを参照してください。たとえば:

With WBkMaster 
    With Sheets("x1") 
    .Range("E7").Value = ... 
    ' Extract data from Sheet x1 to variables here 
    End With 
    With Sheets("x2") 
    ' Extract data from Sheet x2 to variables here 
    End With 
End With 

Set WBkDestination = Application.Workbooks.Open(arkusz) 

With WBkDestination 
    With Sheets("x3") 
    ' Save data for Sheet x3 from variables here 
    End With 
    With Sheets("x4") 
    ' Save data for Sheet x4 from variables here 
    End With 
    . Close 
End With 
oWB = Nothing ' Ensure no reference to closed workbook 

は、ワークシートやブックの間でデータをコピーする他のアプローチがありますが、あなたが最も適切であろうどのアプローチをお勧めするのに十分な情報を与えることはありません。重要な問題は、どのシートとどのワークブックに対処するかを完全に明示しなければならないことです。

+0

+1は本当に明確でうまく説明されています。 – JMax

+0

@JMaxでもこの場合、ステップ1が必要であるかどうかはわかりません。おそらくあなたは私よりも慎重です。間違ったワークブックがアクティブだったために、目的のワークブックをチェックして、マクロを実行する前にクローズするのを忘れてしまいました。私はしばしばマクロを保持しています。ユーザーに別のワークブックを見せたくないので、これは避けたいと思う定期的なリスクです。 –