2011-08-08 17 views
6

現在のブックから他のブックをアクティブにするにはどうすればよいですか?私はdumb.xlsと現在のブックとTire.xls.Iとして他のブック名worksbooks.open filename:= "name of the file"を使用してdumb.xlsからTire.xlsを開いている。開いているが、問題はImは動作させることができません。特定のワークブックと特定のシートを有効にするにはどうすればよいですか?

私が言うところでは、cells(2,24).value=24は、これらの値をdumb.xlsのセルに入れますが、1つのTire.xlsを実行します。

activesheet.cells(2,24).value=24は、これらをTire.xlsに置きます。しかし、どのように私は名前でブックをアクティブにするのですか?私は3から4までのワークブックを開く必要があり、操作を実行する必要がありますか?私は特定のワークブック

をアクティブにするにはどうすればよい私はグーグル

上でこのコード
 activeworkbook.worksheet("sheetname").activate ' but not working 
    windows("sheetname").activate ' people on google suggested not to use 

そのが有効になっていないを発見しました。私はそれを動作させる方法を知らない。誰か教えてください特定のワークブックと他のワークブックの特定のシートをどのようにアクティブにするのですか?

例:numb.xlsとniko_2.xlsをdumb.xlsワークブックのブックとして開いているので、完全に3つのワークブックがあり、niko_2.xlsワークブックの2番目のシートをアクティブ化する必要があります。作成方法は?誰も私にこれらの例の構文を説明することはできますか?あなたは以下を使用することができますWb.Sheets("sheetname")に参照するために、シート名を知るために、事前に

答えて

14

あなたはシートをアクティブにする必要はありません(あなたは巨大なパフォーマンスヒットを取りますよそのためには、実際に)。シートのオブジェクトを宣言しているので、 "wb"で始まるメソッドを呼び出すと、そのオブジェクトを選択しています。たとえば、次のようなものをアクティブ化せずにワークブックの間にジャンプすることができます。

Sub Test() 

Dim wb1 As Excel.Workbook 
Set wb1 = Workbooks.Open("C:\Documents and Settings\xxxx\Desktop\test1.xls") 
Dim wb2 As Excel.Workbook 
Set wb2 = Workbooks.Open("C:\Documents and Settings\xxxx\Desktop\test2.xls") 

wb1.Sheets("Sheet1").Cells(1, 1).Value = 24 
wb2.Sheets("Sheet1").Cells(1, 1).Value = 24 
wb1.Sheets("Sheet1").Cells(2, 1).Value = 54 

End Sub 
+0

コピー/ペーストで上記の "コンパイルエラー - 無効な文字"エラーが表示される理由を知りましたか? –

+1

わかりません。私は日本語のキーボードを使用していますので、バックスラッシュか別の文字コードがあるかもしれません。おそらくExcelのtxtファイルに貼り付けてみてください。私はSub Test()の下にある "'"文字に気付きました。 – aevanko

0
Dim Wb As Excel.Workbook 
Set Wb = Workbooks.Open(file_path) 
Wb.Sheets("Sheet1").Cells(2,24).Value = 24 
Wb.Close 

ありがとう:

Dim sht as Worksheet  
For Each sht In tempWB.Sheets 
    Debug.Print sht.Name 
Next sht 
+0

申し訳ありません。シートを有効にする方法を教えてください。あなたの中にいくつかの値を入れて、私はそれを閉じるよりも、ブック内のすべてのソートと操作をしたいですか?私はいつもWb.sheets( "sheet1")を指摘する必要がありますか......私にそれを教えてください? – niko

4

開いているワークブックへの参照を設定する必要があります。次に、参照を使用してそのワークブックで何でもできます。

Dim wkb As Workbook 
Dim sht As Worksheet 

Set wkb = Workbooks.Open("Tire.xls") 
Set sht = wkb.Sheets("Sheet2") 

sht.Activate 
sht.Cells(2, 1) = 123 

その他.Activateはあなたのケースでは余分であり得ることを指摘している:

Dim wkb As Workbook 
Set wkb = Workbooks.Open("Tire.xls") ' open workbook and set reference! 

wkb.Sheets("Sheet1").Activate 
wkb.Sheets("Sheet1").Cells(2, 1).Value = 123 

も、その後の人生が楽になりますシートへの参照を、設定することができます。厳密にセルを編集する前にシートをアクティブにする必要はありません。しかし、それがあなたがしたいことであれば、それは活性化するために害はありません - あなたがそれを1回または数回だけ行う限り顕著ではないはずのパフォーマンスへの小さなヒットを除いて。ただし、何度もアクティブにした場合など。ループの中では、物事を著しく遅くするので、活性化は避けるべきです。私のために働いた

+0

selectと同じように、有効にするとパフォーマンスが大幅に低下します。たとえば、上記の手順を10,000回ループし、有効にするには約8秒かかります。その1行がなければ0.375秒しかかかりません。もちろん結果は機械によって異なります。 – aevanko

+0

私は、選択を避けて活性化することに大きな違いがあることを知り驚きました。ここにいくつかのREFがあります(アクティベートするとパフォーマンスにヒットします)。http://msdn.microsoft.com/en-us/library/ff726673.aspx – aevanko

+0

OPがループしていない場合は、目立たないでしょう。私は答えにその旨の発言を追加します。 –

0

コードは次のとおりです。

ThisWorkbook.Sheets("sheetName").Activate 
+0

私はワークシートを選択するためにここで述べたすべてのメソッドを試しました(ワークシートを別のワークシートに切り替える)。しかし、「アプリケーションまたはオブジェクト定義エラー」が発生しています。ワークシートが存在します(これをmsgboxで確認するコードを追加しました)。参考にしてください。 – user1175126

0

あなたはこれを試すことができ、この

Windows("name.xls").Activate 
+1

答えがなぜ2年5年以上役に立つのか説明してください。あなたはそれをテストしましたか、他の答えに関して? – manuell

0

を試してみてください。

Workbooks("Tire.xls").Activate 

ThisWorkbook.Sheets("Sheet1").Select 
Cells(2,24).value=24 
関連する問題