2012-03-14 4 views
0

私は作業プロジェクトとは異なるアプローチをとっており、私は壁に乗っています。私はGoogleに考えてもらえるものはすべてGoogleにあり、S.Oに戻る前に複数のフォーラムを検索しました。より多くの助けを求める。 Accessには、ユーザーが顧客/部門の組み合わせを入力し、その顧客の既存のファイルパスが存在することを確認した後、テンプレートファイルを開き、顧客固有のファイル名で正しいフォルダに保存するフォームがあります。これはすべて正常に動作しているようです。ここに私が完全に困惑している部分があります。次の部分は、ワークブックを変数xlWB1とxlWB2、ワークシートをxlWS1とxlWS2(Sheet1)として割り当てているExcelファイルを2つ開くことです。私はxlWB1.xlWS1(セルD2)で開始し、xlWB2.xlWS2.Range(D2:D1937)の範囲のセルの値に対して、そのセルの値(項目番号)でVLookupを実行する必要があります。私の希望は、VLookupを開始する前に各ワークシートの行の総数を数えて、その値を変数に代入し、その変数を使用して範囲の下限を定義できるようにすることでした。私は、これに対する答えが単純なものであれば、事前に謝罪するつもりです。私はVBAを使用してAccessからExcelで操作を実行しようとしたことは一度もなかったので、構文にも苦労しています。私の質問が明確でない場合、または必要な追加情報がある場合はお知らせください。私は下に私の開始コードを貼り付けました。MS Access 2010の2つのオープンスプレッドシート間の動的なVLookupのVBAコード

更新コードは誰でも使用する必要があります!あなたはすべての助けをありがとう!

Sub modExcel_SixMonth() 

    Const WB_PATH As String = "\\FMI-FS\Users\sharp-c\Desktop\TestDir\" 

    Dim xlApp As Excel.Application 

    Dim xlWB As Excel.Workbook 
    Dim xlWS As Excel.Worksheet 
    Dim xlRng As Excel.Range 
    Dim rCount As Long 

    Dim xlWB2 As Excel.Workbook 
    Dim xlWS2 As Excel.Worksheet 
    Dim rCount2 As Long 
    Dim sFormula As String 

    Dim i As Long 
    Dim xlSheetName As String 
    Dim bolIsExcelRunning As Boolean 

    On Error Resume Next 
    Set xlApp = GetObject(, "Excel.Application") 
    If Err.Number <> 0 Then 
     Set xlApp = CreateObject("Excel.Application") 
    Else 
     bolIsExcelRunning = True 
    End If 

    xlApp.Visible = False 

    Set xlWB = xlApp.Workbooks.Open(WB_PATH & "acct 900860 Kentucky RSTS.xlsx") 
    Set xlWS = xlWB.Sheets(1) 

    Set xlWB2 = xlApp.Workbooks.Open(WB_PATH & "acct 900860 six months.xlsx") 
    Set xlWS2 = xlWB2.Sheets(1) 

    xlSheetName = xlWS2.Name 

    ' rCount: RSTS Row Count 
    rCount = xlWS.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 
    Debug.Print "rCount : " & rCount 

    ' rCount2: 6 Months Row Count 
    rCount2 = xlWS2.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 
    Debug.Print "rCount2 : " & rCount2 

    xlWS.Activate 

    With xlWS 
     For i = 2 To rCount 

      sFormula = "=VLOOKUP(C" & i & ", '" & WB_PATH & "[" & "acct 900860 six months.xlsx" & "]" & _ 
         xlSheetName & "'!$D$2:$D$" & rCount2 & ", 1, 0)" 

      Debug.Print sFormula 
      .Range("D" & i).Formula = sFormula 
      DoEvents 
     Next 
    End With 

    xlWB.Save 

    xlWB2.Close False      'Closes WB Without Saving Changes 
    Set xlWB2 = Nothing 

    Set xlWS = Nothing 
    xlWB.Close 
    Set xlWB = Nothing 

    If Not bolIsExcelRunning Then 
    xlApp.Quit 
    End If 

    Set xlApp = Nothing 

End Sub 
+2

...両方のワークブックのためのエクセルの単一のインスタンスを必要とするだけそれを(たくさんの)読みやすくするために? – mkingston

答えて

3

これはおそらくあなたが必要とするものに近いと思います。私は(私が試した、これは私が見つけた方法です)編集権限を持っていませんが、私はあなたが質問にいくつかの改行を入れてお勧めかもしれません

Sub modExcel_SixMonth() 

Const WB_PATH As String = "C:\Documents and Settings\Chris\Desktop\TestDir\" 

Dim xlApp As Excel.Application 
Dim xlWB As Excel.Workbook 
Dim xlWS As Excel.Worksheet 
Dim xlRng As Excel.Range 
Dim rCount As Long 

Dim xlWB2 As Excel.Workbook 
Dim xlWS2 As Excel.Worksheet 
Dim xlRng2 As Excel.Range 
Dim rCount2 As Long 
Dim sFormula As String 

    Set xlApp = CreateObject("Excel.Application") 
    xlApp.Visible = True 

    Set xlWB = xlApp.Workbooks.Open(WB_PATH & "acct 900860 Kentucky RSTS.xlsx") 
    Set xlWS = xlWB.Sheets(1) 

    Set xlWB2 = xlApp.Workbooks.Open(WB_PATH & "acct 900860 six months.xlsx") 
    Set xlWS2 = xlWB2.Sheets(1) 

    ' rCount: RSTS Row Count 
    rCount = xlWS.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count - 1 
    Debug.Print "rCount : " & rCount 

    ' rCount2: 6 Months Row Count 
    rCount2 = xlWS2.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count - 1 
    Debug.Print "rCount2 : " & rCount2 

    sFormula = "=VLOOKUP(C2," & xlWS2.Range("D2:D1937").Address(True, True, , True) & _ 
       ",1,FALSE)" 

    Debug.Print sFormula 
    With xlWS 
     .Range("D2").Formula = sFormula 
    End With 

End Sub 
+0

もう一度、私は助けてくれてありがとう!それはまさに私が必要としていたものです。今私はVlookupの議論を調べる必要があるので、なぜそれが動作するのかを実際に理解することができます!どうもありがとうございます!! – CSharp821

1

同じアプリケーションオブジェクトを使用しようとしましたか?私はこれがこの質問に対するコメントであったと考えています。

さらに、これが機能しない場合は、範囲オブジェクトのfindメソッドを使用できます。私。

XLWB2.Range("Your range here").find(XLWB1.Range(_ 
    "Cell containing value you're looking for").Value,lookat:=xlwhole) 
+0

'{}'ボタンを使用してコードを 'code'としてフォーマットしてください。 –

関連する問題