Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5360 / 13646 ツリー ←次へ | 前へ→

【51299】VBA デジタル時計の作成 さつき 07/9/11(火) 6:21 質問[未読]
【51300】Re:VBA デジタル時計の作成 ぱっせんじゃー 07/9/11(火) 7:38 発言[未読]
【51301】Re:VBA デジタル時計の作成 ぱっせんじゃー 07/9/11(火) 7:41 発言[未読]
【51306】Re:VBA デジタル時計の作成 ぱっせんじゃー 07/9/11(火) 11:01 発言[未読]
【51324】Re:VBA デジタル時計の作成 さつき 07/9/12(水) 5:32 お礼[未読]
【51303】Re:VBA デジタル時計の作成 ichinose 07/9/11(火) 8:20 発言[未読]
【51323】Re:VBA デジタル時計の作成 さつき 07/9/12(水) 5:26 質問[未読]
【51326】Re:VBA デジタル時計の作成 ichinose 07/9/12(水) 7:17 発言[未読]

【51299】VBA デジタル時計の作成
質問  さつき  - 07/9/11(火) 6:21 -

引用なし
パスワード
   エクセルのVBAを使用して一分間に140の値が加算される世界人口時計を作成したいのですが、そういったものはVBAで作成可能でしょうか。
VBAでアナログ時計は作成したことがあるのですが、デジタルのものを作成したことはありません。
作成時のアドバイスなどいただければ幸いです。
よろしくおねがいします

【51300】Re:VBA デジタル時計の作成
発言  ぱっせんじゃー  - 07/9/11(火) 7:38 -

引用なし
パスワード
   OnTime メソッド
をVBAヘルプで調べてみてください。

【51301】Re:VBA デジタル時計の作成
発言  ぱっせんじゃー  - 07/9/11(火) 7:41 -

引用なし
パスワード
   もしかして表示文字の作りかたが分からないのかな?
たまたま昨日遊びでデジタル文字の作り方を勉強してたので
書いてみます。
自動記録に毛が生えた程度ですが。
シェイプで台形を作り、コピーし90度回転、二つの台形を
結合します。

Sub test()
Dim tp As Single
Dim lt As Single
Dim wd As Single
Dim ht As Single
Dim r As Range
Dim sp As Object
Dim myarray() As Variant
Dim i As Integer
 Set r = ActiveCell
 lt = r.Left
 tp = r.Top
 wd = r.Offset(, 1).Left - r.Left
 ht = r.Offset(1).Top - r.Top
  ActiveSheet.Shapes.AddShape(msoShapeTrapezoid, lt, tp, wd, ht).Name = "SP1"

  ActiveSheet.Shapes("SP1").Duplicate.Name = "SP2"
  With ActiveSheet.Shapes("SP2")
  .IncrementRotation 180#
  .Top = ActiveSheet.Shapes("SP1").Top - ht
  .Left = lt
  ActiveSheet.Shapes("SP1").Top = .Top + .Height

  End With
  i = -1
  For Each sp In ActiveSheet.DrawingObjects
  i = i + 1
  ReDim Preserve myarray(0 To i)
  myarray(i) = sp.Name
  Next
 ActiveSheet.Shapes.Range(myarray).Group.Name = "G"
End Sub

【51303】Re:VBA デジタル時計の作成
発言  ichinose  - 07/9/11(火) 8:20 -

引用なし
パスワード
   ▼さつき さん:
おはようございます。

>エクセルのVBAを使用して一分間に140の値が加算される世界人口時計を作成したいのですが、そういったものはVBAで作成可能でしょうか。

ぱっせんじゃーさんの投稿のように数字の見栄えのことを言っておられるなら、
この投稿は的外れですが・・・。

>VBAでアナログ時計は作成したことがあるのですが、デジタルのものを作成したことはありません。

私もアナログ時計はお遊びで作ったことがありますが、
基本的には、デジタルの方が簡単だと思いますよ


新規ブックにユーザーフォームを一つ作成して置いてください。
(Userform1)
コントロールは、コードで作成しますから、一切要りません。

上記のUserform1のモジュールに
'==================================================================
Option Explicit
Public cls As Long
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = 0 Then
    Cancel = True
    cls = 1
    Me.Hide
    End If
End Sub


標準モジュールに
'========================================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'========================================================================
Sub main()
  Dim ie As Object
  Dim idoc As Object
  Set ie = CreateObject("InternetExplorer.Application")
  With ie
    .Visible = False
    .navigate "http://www.census.gov/ipc/www/popclockworld.html"
'         ↑httpは半角に訂正してください
    Call set_userform
    UserForm1.Show vbModeless
    DoEvents
    Do
     DoEvents
     Do While .Busy = True Or .readyState <> 4
       Loop
     Set idoc = ie.document
     UserForm1.Controls("label1").Caption = idoc.getElementById("worldnumber").innerText
     DoEvents
     Sleep 5000
     .Refresh
     Loop Until UserForm1.cls = 1
    .Quit
    End With
  
  Set ie = Nothing
  Set idoc = Nothing
  Unload UserForm1
End Sub
'========================================================================
Sub set_userform()
  Load UserForm1
  With UserForm1
    .Caption = "世界人口時計"
    .Height = 100
    .Width = 250
    With .Controls.add("Forms.Label.1", "label1", True)
     .Left = 36
     .Top = 24
     .Width = 180
     .Height = 26
     .Font.Size = 26
     .BackColor = &H80000009
     .textAlign = 3
     End With
    End With
End Sub


として、mainを実行してみてください。
どこから、人口情報を取得するかですが・・・。


尚、Doeventsのタイミングでしかユーザーフォームを閉じることが出来ませんから、
連続で閉じるボタンをカチカチしてください。
処理が終了します。

【51306】Re:VBA デジタル時計の作成
発言  ぱっせんじゃー  - 07/9/11(火) 11:01 -

引用なし
パスワード
   シェイプを使わなくてもセル幅、セル高の調整で十分でしたね。
失礼しました。

【51323】Re:VBA デジタル時計の作成
質問  さつき  - 07/9/12(水) 5:26 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。回答ありがとうございました。

数字の見栄え以前の問題で、On timeのステートメントから内臓時計とどのようにしたらん人数の増加とを関連させられるか、またJavaでなくとも出来るのかということをお伺いしたかったんです。

ichinoseさんの作成していただいたプログラムで実行したのですが、エラーがでてしまいます。「End sub以降にはコメント、ステートメント以外は入力できません」と表示がでます。私自身ichinoseさんに作成して頂いたプログラムがはじめのプログラム以降理解できていません。

'========================================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'========================================================================

の部分でエラーするのですが、どうしたらエラーが解決するでしょうか?
色々やってみたのですが八方塞です。申し訳ありませんが教えてください

【51324】Re:VBA デジタル時計の作成
お礼  さつき  - 07/9/12(水) 5:32 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
回答ありがとうございます。
質問がわかりにくく申し訳ありませんでした。

VBAでJavaでなくとも内蔵時計とかませて加算しつづけるプログラムが作成できるのかということと、作成時の特に内蔵時計と加算のプログラムをどうかみあわせるかという所でアドバイスがいただけたらと考えていました。

しかし、ぱっせんじゃーさんの表示に関するプログラムなども参考になりあした。
ありがとうございました

【51326】Re:VBA デジタル時計の作成
発言  ichinose  - 07/9/12(水) 7:17 -

引用なし
パスワード
   おはようございます。


>ichinoseさんの作成していただいたプログラムで実行したのですが、エラーがでてしま
>います。「End sub以降にはコメント、ステートメント以外は入力できません」と表示が
>でます。私自身ichinoseさんに作成して頂いたプログラムがはじめのプログラム以降理
>解できていません。

>'========================================================================
>Option Explicit
>Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>'========================================================================

>の部分でエラーするのですが、どうしたらエラーが解決するでしょうか?
このエラー自体は、このような記述をすれば、簡単に再現します。

新規ブックの標準モジュールに(あくまでも新規ブックですよ!!)
'========================================================
Sub test()
  aaa = 15
  MsgBox aaa
End Sub
Dim aaa As Long

として、testを実行してみてください。
(尚、Option Explicitも記述しないで実行してください)

いかがですか? 同じエラーメッセージが表示されませんか??
つまり、モジュール宣言部(ここでは、Dim aaa As Long)は、
コードより、上位行にて記述しなさい ということです。

で、元に戻ると・・・。

>Option Explicit
>Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

↑この記述より、上位行にコードが記述されていませんか?


>
>新規ブックにユーザーフォームを一つ作成して置いてください。
>(Userform1)
>コントロールは、コードで作成しますから、一切要りません。
>
>上記のUserform1のモジュールに
>'==================================================================
>Option Explicit
>Public cls As Long
>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
>  If CloseMode = 0 Then
>    Cancel = True
>    cls = 1
>    Me.Hide
>    End If
>End Sub

例えば、↑このコードが記述されていませんか?
これは、Userform1のモジュールに記述するのですよ!!


↓ここからは、標準モジュールに記述するのですよ!!


>'========================================================================
>Option Explicit
>Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>'========================================================================
>Sub main()
>  Dim ie As Object
>  Dim idoc As Object
>  Set ie = CreateObject("InternetExplorer.Application")
>  With ie
>    .Visible = False
>    .navigate "http://www.census.gov/ipc/www/popclockworld.html"
>'         ↑httpは半角に訂正してください
>    Call set_userform
>    UserForm1.Show vbModeless
>    DoEvents
>    Do
>     DoEvents
>     Do While .Busy = True Or .readyState <> 4
>       Loop
>     Set idoc = ie.document
>     UserForm1.Controls("label1").Caption = idoc.getElementById("worldnumber").innerText
>     DoEvents
>     Sleep 5000
>     .Refresh
>     Loop Until UserForm1.cls = 1
>    .Quit
>    End With
>  
>  Set ie = Nothing
>  Set idoc = Nothing
>  Unload UserForm1
>End Sub
>'========================================================================
>Sub set_userform()
>  Load UserForm1
>  With UserForm1
>    .Caption = "世界人口時計"
>    .Height = 100
>    .Width = 250
>    With .Controls.add("Forms.Label.1", "label1", True)
>     .Left = 36
>     .Top = 24
>     .Width = 180
>     .Height = 26
>     .Font.Size = 26
>     .BackColor = &H80000009
>     .textAlign = 3
>     End With
>    End With
>End Sub
>

これが正しく行われていないのではないですか?

再度、前回の私の投稿と照らし合わせてみてください。

5360 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free