2012-04-18 1 views
2

最近Excelマクロを作成しようとしていましたが、特定のワークシートが存在するかどうかを判断する必要がありました。スクリプティングのための私の武器はPythonであり、私のVBAスキルは貧弱です。だから、良いニシキヘビスタイルで、私は権限のアプローチよりも、許しを求めるために簡単に取り、そしてこのようなものを書いた:私はprint文を排除しようとするまでVBAの式文

Debug.Print MyWorkbook.Worksheets(TabName).Name ''Check for an index error 
If Err.Number <> 0 Then 
    ''Code to add the sheet to the workbook 

これはとてもうまくいきました。私がする最初の行を変更:

MyWorkbook.Worksheets(TabName).Name 

そして突然、私はエラー「オブジェクトはこのプロパティまたはメソッドをサポートしていません」の取得を開始しました。 Pythonのプログラマーとして、これは私を驚かせました。私はPythonで似たようなことをいつもしています。

私は少し興味があったので少し読んだ。私は上記のようなPythonでの式文についてのドキュメントを見つけることができましたが、VBAではそうではありませんでした。表現式文はVBAでは許されませんか?もしそうなら、彼らはなぜそうでないのですか?誰が私がこれについて読むことができるか知っていますか?

+2

が、私は:)許しを依頼することが容易だと思いました。 –

+0

ワークシート名を変数に割り当てると、問題が解決しますか? – Marc

+0

@DougGlancy母、よかったです。打ち間違え! – Emma

答えて

2

短い答えは「いいえ」です。 VBAは絶対に欠かせません。一般に、式は法的に独立したステートメントではありません。あなたは、多くの表現も「コンパイル」ではないということに気づくでしょう:

'Won't "compile" 
(42+99) 

あなたの具体的な例では、もう少しで起こってあります。 VBAは、値を返す式として、この行にあなたが意図している方法をMyWorkbook.Worksheets(TabName).Nameを見て:呼び出そうとしていると

'Error: tries to call `Name` as method 
MyWorkbook.Worksheets(TabName).Name 

'Fine: gets value of `Name` property 
Debug.Print MyWorkbook.Worksheets(TabName).Name 

VBAは、このライン上で同じコードを見てワークシートオブジェクトの(存在しない)Nameメソッド。 (NameWorksheetのプロパティです)エラーメッセージは、何が起こっているのかを知るようになりました。

限り、これについての詳細を読んだとして、あなたはここで見ることができる:

https://stackoverflow.com/a/1545024/58845

は、おそらくより正確にこの種のものをカバーVBA言語仕様、そこまでのリンクあります、私はdidnのが」 Tチェック:

http://msdn.microsoft.com/en-us/library/dd361851%28PROT.10%29.aspx

0

VBAでは、uが実際にそれを使用せずに変数の行を書き込むことはできません。 @Marcのように、別の変数に名前を割り当てるだけでいいです。

のほかに、通常は私が確認するには、次の機能を使用します。

Public Function CheckWorksheetExists(wsNams As String) As Boolean 

    Dim ws As Worksheet 
    On Error Resume Next 
    Set ws = Thisworkbook.Worksheets(wsName) 
    CheckWorksheetExists = err.Number = 0 

End Function