2016-07-12 1 views
0

午後。私は今これを達成するために複数の方法を試しました。本質的には、コードを実行すると動作しますが、ワークブックが必要なときに開くと、コードは実行されません。これを達成するための簡単な方法はありますか?番号をランダム化し、ワークブックに対応するセルを表示する。

基本的に行5-28にはランダムな文字列があり、ワークブックを開くたびにランダムな文字列の1つを表示するようにします。

私は正しい線に沿っているかもしれないと思いますが、何も分かりませんか?

感謝

Private Sub Workbook_Open() 
    wbOpenEventRun = True  
    Dim MyValue 
    MyValue = Int((28 * Rnd) + 5) 
    Sheets("Hints & Tips").Range("G4") = Cells(MyValue, 7) 
End Sub 
+0

+ 5、問題は現在、何ですか? –

答えて

1

はこれを試してみてください:

Private Sub Workbook_Open() 
    Randomize 'As Suggested by John Coleman 
    wbOpenEventRun = True  
    Dim ws As Worksheet 
    Set ws = Sheets("Hints & Tips") 
    ws.Range("G4").Value = ws.Range("G" & Int((23 * Rnd()) + 5)).Value 
End Sub 
+0

なんらかの理由でファイルを開いたときに初めてそれを開いたときに、行が17に設定され、変更されなかった(10回開いた) – OliEshmade

+0

Rndの後ろに括弧を入れてみてください。値 " – Carmelid

+0

@OliEshmade乱数ジェネレータを再シードするように、サブの最初の行に' Randomize'を使用する必要があります(システムクロックから)ブックを開くたびに。 –

1

あなたはRangeオブジェクトにではなく、セルの値に何かを割り当てるしようとしていました。ソースセルのValueプロパティを読み、先のValueプロパティにそれを書く:

Sheets("Hints & Tips").Range("G4").Value = Sheets("SourceSheet").Cells(MyValue, 7).Value 

また、データのソースであるシートを指定する、またはそれがでアクティブなシートに依存しますがベストですマクロが実行される時間 - あなたが望む動作でない限り。

1

あなたはApplication.WorksheetFunction.RandBetween()を使用することができます:私はちょうどあなたが(23 *のRND)が必要だと思う

Private Sub Workbook_Open() 
    wbOpenEventRun = True  
    Dim MyValue 
    MyValue = Application.WorksheetFunction.RandBetween(5,28) 
    Sheets("Hints & Tips").Range("G4") = Cells(MyValue, 7) 
End Sub 
+0

ありがとうございました。謝罪私は他の答えを正しいものとしてマークしました。あなたのソリューションは完全に機能しました。それを解決するのは無作為化という言葉でした。 – OliEshmade

+0

@OliEshmade謝罪する必要はありません。複数のソリューションを知っておくとよいでしょう。 'RandBetween'を使うのが好きな理由の1つは、自動的に再シードを処理するからです。一方、私は 'Rnd()'を使うほうがおそらく少し早いと思う。 –

関連する問題