2017-01-25 10 views
0

このコードを開発する際に問題が発生しています。ワークブックから既存のパスに新しいデータをコピーするコードを開発できましたが、既存のパスワークブックからデータを取得しようとする際に問題にぶつかります。ブックを別のブックにコピー

私のシステムには、データを収集するワークブックがあるという概念です。データは、プロジェクト情報を扱っているさまざまなユーザーからのものです。プロジェクトを完了すると、この新しい情報と既存の情報がアップロードされ、ワー​​クブックにそのデータが収集されます。データを収集するワークブックには、常に定義されたパスがあります。ユーザーが作業しているワークブックは、システム全体の複数の場所に配置されます。

以下のマクロは、 "Organizer.Sheets(" Partnumber_Vendor_Database ")で失敗し続けます。なぜ私は不明です。

"オーガナイザ"は、ユーザーが使用するローカルデータベースです。 "Partnumber_Vendor_File"は、情報が格納されるローカルデータベースです。

このコードがより良く開発されていることがわかったら私にお知らせください! :)

Sub Find_Partnumber_Vendor_File() 

' This sub is to open the partnumber_Vendor file to update the local database. 

    On Error Resume Next 

    Dim Organizer As Workbook 
    Set Organizer = Application.ActiveWorkbook 


    Dim Partnumber_Vendor_File As Workbook 
    Set Partnumber_Vendor_File = Workbooks.Open("S:\Supply Chain\PURCHASING\Forms and Templates\BOM Organizer\Partnumber_Vendor_File.xlsx") 

    If Err.Number = 1004 Then 
    MsgBox "Could not open. Check path in VBA" 
    Exit Sub 
    End If 

    If Partnumber_Vendor_File.ReadOnly Then 
     MsgBox "Sorry, partnumber to vendor database was already in use, try later" 
     Exit Sub 
    End If 

    On Error GoTo 0 

    Dim Data As Long 
    Data = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row 
    Range("A1:" & "D" & Data).Copy 


    Organizer.Sheets("Partnumber_Vendor_Database").Select 
    Range("A1:D1").Select 
    Selection.Insert Shift:=xlDown 

    Partnumber_Vendor_File.Close 


End Sub 
+0

失敗するコードの前に 'Organizer.Activate'を書くことができますか? – Vityata

+0

Hello Vityata、Organizer.Activateは何の影響もありませんでした。エラーは、Organizer.Sheets( "Partnumber_Vendor_Database")で再度発生しました。私は「主催者」も削除しました。 Organizer.Sheets( "Partnumber_Vendor_Database")。を選択します。しかし、良い考えだ! :) –

+0

'Organizer.Worksheets(" Partnumber_Vendor_Database ")。選択? – Vityata

答えて

0

ActiveWorkbookActiveSheetSheets(<Title of the Sheet.)を避けるため、使いやすいですAlthoug。

最初の2つの問題は、アクティブワークブックが実際にあなたが探しているブックであるかどうかを知ることが難しいことです。これを回避するには、Workbooksオブジェクトを使用してNAME(プロパティーCodeName)で正しいワークブックを選択する方法があります。あなたが彼らを適切に呼び出すことができるように、シートの同じ名前は、シートの実際の名前を変更します。

第3のものは基本的に同じ原理です。一般に、スプレッドシートのタイトルを参照として使用しないでください。オブジェクトの実際の名前を使用してください。変更するには、VBAコードのプロパティウィンドウを使用します。 - あなたの選択したブックは、あなたが仕事をしたい、実際のワークブックではありません

1:

エラーが2つの状況から来るかもしれません。

2 - 「Partnumber_Vendor_Database」シートのタイトルが変更または誤っていました。

希望します。

+0

こんにちはRdnoberga、あなたが言ったことは間違いありません。複数のユーザーがそこにある別のフォルダにコピー、名前を変更、保存するテンプレートであるため、これをアクティブワークブックとしてオブジェクトとして設定すると、最も理にかなっていました。私は "オーガナイザー"を入れて考えました。正しいブックを選択します。もしも別の方法があるなら、私に知らせてください!:) Organizer.Sheets( "Partnumber_Vendor_Database")からコードを変更しました。Organizer.Sheets(2)を選択します。選択します。しかし、これは "自動化エラー"というエラーが出てきました。 –

+0

ウォーレン、これを試してください: "Partnumber_Vendor_Database"というタイトルのシートオブジェクトの名前を変更してください。これは、VBAエディタのプロパティウィンドウで変更できます。こちらをご覧ください:[リンク](http://imgur.com/a/MEskD)この方法で、名前をVendor_DBのようなものに変更して、コードに直接アクセスできます。したがって、 'Organizer.Sheets(" Partnumber_Vendor_Database ")の代わりに' Vendor_DB.Select'と入力するだけでOKです。それがうまくいけば教えてください:) – rdnobrega

+0

仕事中にリンクがブロックされています。私は今夜​​見てみるつもりです。 –

関連する問題