2017-08-05 6 views
1

私はvbaスクリプトに慣れていないので、この簡単な割り当てステートメントでどこが間違っているのか分かりません。 ThisWorkBookで変数を初期化し、それらをシート1で使用しようとしました。なぜこの単純な代入文が動作しないのですか(vba)?

コード:

Public count1 As Integer 
Public count2 As Integer 
Public count3 As Integer 
Public row13 As Integer 
Public srow8 As Integer 
Public erow8 As Integer 
Private Sub Workbook_Open() 

count1 = 18 
count2 = 26 
count3 = 26 
Sheet1.setValues 
Sheet1.getValues 
End Sub 

Sub setValues() 
row13 = ThisWorkbook.count1 
Debug.Print (row13) 
srow8 = ThisWorkbook.count2 
erow8 = ThisWorkbook.count3 
End Sub 

Sub getValues() 
Debug.Print ("row13") 
Debug.Print (row13) 
Debug.Print ("srow8") 
Debug.Print (srow8) 
Debug.Print ("erow8") 
Debug.Print (srow8) 
End Sub 

(すべての変数はグローバルです) 私は、これらの値を印刷しようとすると印刷された値がありません。 どこが間違っていたのですか? これで私を助けることができれば、大きな助けになるでしょう。 ありがとうございます。 :)

+0

'' Row13'、 'srow8'と' erow8'はあなたの 'ThisWorkbook'コードであると仮定してモジュールレベルとして宣言されていますが、あなたは' Sheet1'コードでモジュールの外側でそれらを使用しようとしています。 – YowE3K

+0

はい、あなたはThisWorkbookコードの外にあることは間違いありませんが、変数がpublicなので、sheet1からもこれを使用できないはずですか? – Devanshi

答えて

2

変数は、定義されているオブジェクトだけでなく、コードの任意の領域からアクセスできます。つまり、参照するときにオブジェクトを指定する必要はありませんたとえば、ThisWorkbookオブジェクトに含まれているものは、ThisWorkbook.count1などと呼ばれます。関連するオブジェクトで変数を修飾しないようにするには、標準コードモジュール内で変数Publicを作成します。

私は次のように何をやろうとしていることであると考えている:

あなたThisWorkbookコードモジュールでは:あなたのSheet1コードモジュールで

Private Sub Workbook_Open() 
    count1 = 18 
    count2 = 26 
    count3 = 26 
    Sheet1.setValues 
    Sheet1.getValues 
End Sub 

:一般コードで

Sub setValues() 
    row13 = count1 
    Debug.Print row13 
    srow8 = count2 
    erow8 = count3 
End Sub 

Sub getValues() 
    Debug.Print "row13" 
    Debug.Print row13 
    Debug.Print "srow8" 
    Debug.Print srow8 
    Debug.Print "erow8" 
    Debug.Print srow8 
End Sub 

モジュール(おそらくModule1):

Public count1 As Integer 
Public count2 As Integer 
Public count3 As Integer 
Public row13 As Integer 
Public srow8 As Integer 
Public erow8 As Integer 
+0

私はThisWorkbook一般コードモジュールのPublic変数を持っていました 助けてくれてありがとう – Devanshi

+0

彼らは 'ThisWorkbook'にあったので、' ThisWorkbook.count1'を使ってアクセスできました。なぜなら、 'Workbook_Open'内で' count1'を暗黙的に現在のオブジェクトの中で 'count1'にデフォルト設定されている' ThisWorkbook')、 'setValues'内で' row13'の値を設定すると( 'row13'は暗黙的に手続きレベルのスコープ付き変数を参照します。モジュールレベルのスコープ付き変数'ThisWorkbook.count1'(' ThisWorkbook'オブジェクト内の 'count1'変数を明示的に参照しています)に追加しました。 – YowE3K

関連する問題