2017-10-31 15 views
1

VBAにはかなり新しく、VBAを使用してパスを変更して他のブックからデータを自動的に収集するExcelテンプレートを作成しようとしています。基本的に、情報を格納するマスタドキュメントを作成します。私は範囲がC4を経るようにする方法を考え出したていないがVBAの範囲

Sub CallOtherWB() 

    Dim JobNumber As String 

    JobNumber = Range("C4").Value 

    With Range("D4") 
    .Formula = "='Y:\Public\QA Other\Scorecards\Copy of Scorecard v0.6 " & 
     JobNumber & ".xlsm'!Total" 
End With 

End Sub 

:私は、次のコードを使用しています現時点では

C50を、データをつかむには行くだろう"='Y:\Public\QA Other\Scorecards\Copy of Scorecard v0.6 " & JobNumber & ".xlsm'!Total"を編集することが入力されましたD4で:D50。

私は他の質問から検索してループのようなことを試みましたが、範囲の仕組みを理解する方法は理解できませんでした。 要約すると、私はそのコードを使ってC列に情報を入力し、その情報がD列の "JobNumber"部分を置き換えて、正しいファイル名を持つようにします。

これをさらに明確にする必要がある場合はお知らせください。また、事前にお手伝いいただきありがとうございます。 これはStackoverflowの私の最初の質問ですので、間違いがありましたらお詫び申し上げます。

答えて

0

以下のコードは私のために働きました。ここ

Sub CallOtherWB() 

Dim JobNumber As String 
Dim srcCell As String 

Dim id As Integer 

    For id = 4 To 50 
     srcCell = "C" & id 

     JobNumber = Range(srcCell).Value 

     Range("D" & id).Value = "='C:\Users\banand\Desktop\test\[" & JobNumber & ".xlsx]Total'!D4" 
    Next 

End Sub 

トリックを正確にファイルパスを設定することです。以下のようにファイルパスを置き換えて、動作するかどうかをテストすることができます。

Range("D4").Value = "='Y:\Public\QA Other\Scorecards\[Copy of Scorecard v0.6 " & JobNumber & ".xlsm]Total'!D4" 

上記動作しない場合は、以下のようにちょうど完全なファイルパスを持つセル、D3(またはターゲットExcelでお好みのいくつかの他の細胞)で、以下の値のキーを試すことができますコードのファイルパス部分が正しく翻訳されているかどうかを確認してください。

='Y:\Public\QA Other\Scorecards\[Copy of Scorecard v0.6 " & JobNumber & ".xlsm]Total'!D4:D50" 

希望します。

+0

ちょうどあなたが知っているので、私はソースファイルを閉じてそれをテストし、それは完璧に働いた。 :-) –

+0

私はこのコードが何をするのか理解しており、助けに感謝します。ただし、マスターブックのD列にあるパスのジョブ番号部分を置き換えるために、マスターブックのC列に入力する情報を取得しようとしています。セルはそれを参照しています(合計)は、私がマスターブックで使用する必要がある番号を持っており、他のワークブックで作業するときに更新する必要があります。これは、C5からD5、C6からD6などのように更新する必要があるときに、すべてのD列を更新するのに役立ちますが、C4の同じ値で更新するのに役立ちます。 – Josh

+0

@Josh、修正されたコードを見て、今度は4列目から50行目のC列を繰り返します。これが必要なものなら、私の答えを受け入れてください。 –

0

ルーピングは過剰です。変数に値を入れることで、セルごとに固定します。これはあなたの目的にとっては非効率的です。

Sub CallOtherWB() 

    Range("D4:D50").FormulaR1C1= "='Y:\Public\QA Other\Scorecards\Copy of Scorecard v0.6 "" & RC[-1] & "".xlsm'!Total" 

End Sub 
+0

助けてくれてありがとう、私はそのコードを使ってみましたが、私は数式が何をしているのか分かりませんし、それを実行するとRC [-1]が出てきます。多分私は何かを見逃しているようですね?私が必要とするのは、RC [-1]がC欄の情報に置き換えられるということです。 – Josh

0

は、私は('文字と感嘆符をしている場所を確認してください)、それはこのようにする必要があり、パスが正しくないと信じて:あなたはせずに行うことができます達成したい何

='C:\path_to_directory\[file_name.xlsx]sheet_name'!A1

VBA。 INDIRECTの機能をご覧ください。あなたはD4のセルに次の数式を入力する必要があります:

=INDIRECT("'Y:\Public\QA Other\Scorecards\[Copy of Scorecard v0.6 " & C4 & ".xlsm]Total'!A1"

+0

間接関数を使用する際の問題は、Excelが機能するためにExcelを開く必要があることです。だから私はVBAを見て、文書を作成してその番号をファイル名に変更するだけなので、閉じたExcelから取得できるようにすることにしました。 – Josh

+0

"RefreshAll"機能はどうですか? –

+0

他のExcelワークブックが開いていない限り、#REFエラーが発生します。 – Josh