次の方法で共有

フォントの一覧表を作成するマクロを、Workbook Open時に実行すると、エラーになる。____

Anonymous
2010-07-14T15:10:19+00:00

マクロプログラム

Private Sub Workbook_open()

    Start

End Sub

Sub Start()

    Dim i As Long

    Range("B2:B1000").ClearContents

    With Application.CommandBars("Formatting").Controls(1)

        For i = 1 To .ListCount

            Cells(1 + i, 2) = .List(i)

        Next i

    End With

End Sub

エラー表示

 「実行時エラー -2147467259(80004005)  List.Countメソッドは失敗しました」

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2010-07-16T10:19:06+00:00

私もVista+2007、2010でも発生しませんね。

好みの問題ですが、Waitさせる対症療法でしたら、安直に↓みたいなことをやると思います。

Sub Start()

    Dim i As Long

    Dim wFlg As Boolean, X As Variant

    Range("B2:B1000").ClearContents

    On Error Resume Next

     Do

      X = Application.CommandBars("Formatting").Controls(1).ListCount

      wFlg = Err.Number = 0

      Err.Clear

     Loop Until wFlg

    On Error GoTo 0

    With Application.CommandBars("Formatting").Controls(1)

        For i = 1 To .ListCount

            Cells(1 + i, 2) = .List(i)

        Next i

    End With

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2010-07-16T02:21:00+00:00

こんにちは。

以前似たようなことがあって、Service Packを当てたら問題が

起きなくなったことがあります。

もし最新版のService Packをインストールしていないようでしたら、

インストールしてみるのも有りかもしれません。

また、無理やり処理するのであれば下記のような感じでしょうか。

他の回答者の方が回答されているように、待ち処理を加えています。

'ThisWorkbook

Private Sub Workbook_Open()

    Application.OnTime [Now() + "0:00:00.1"], "ThisWorkbook.Start"

End Sub

Public Sub Start()

    Dim cbo As Office.CommandBarComboBox

    Dim TimeLimit As Date

    Dim i As Long

    TimeLimit = DateAdd("s", 2, Now())

    On Error Resume Next

    Do

        Set cbo = Application.CommandBars("Formatting").Controls(1)

        If Now() > TimeLimit Then Exit Do

        DoEvents

    Loop While cbo Is Nothing

    On Error GoTo 0

    If cbo Is Nothing Then

        MsgBox "処理が失敗しました。", vbCritical + vbSystemModal

        Exit Sub

    End If

    Range("B2:B1000").ClearContents

    With cbo

        For i = 1 To .ListCount

            Cells(1 + i, 2) = .List(i)

        Next i

    End With

    Set cbo = Nothing

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

10 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2010-07-15T14:37:15+00:00

    Formattingは書式コマンドバーですから最初から存在するはずです。

    私もVista+2003で問題なく動きましたが?

    因みに

    Private Sub Workbook_open()

        msgbox "XXX"

        Start

    End Sub

    のようにして、起動時に一度止めたらどうなりますか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2010-07-15T13:57:32+00:00

    anning様  回答、ありがとうございました。

    「List.Countメソッドは失敗しました」は、「ListCountメソッドは失敗しました」の誤りでした。

    EXCELファイルをオープンしたときに、自動的にマクロが起動されるプログラムの中で、

    システムのフォントを表示して、フォントを選択するようにしています。

    前のPC(XP)のときは、問題なく動作していましたが、新しいPC(Vista)では、

    エラーになってしまうため、質問した次第です。

    起動直後に「Application.CommandBars("Formatting").Controls(1)」が作成されている

    保証がないので、エラーになっても仕方ないとのことですが、

    起動直後に「Application.CommandBars("Formatting").Controls(1)」を作成するには、

    どうしたらよいのでしょうか?

    エラーにならないようにする方法がありましたら、ご教示ください。

    よろしくお願いします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2010-07-15T01:07:06+00:00

    「List.Countメソッドは失敗しました」じゃなくて

    「ListCountメソッドは失敗しました」ですよね?

    Office 2003 + Vista で試しましたがエラーになりませんでした。

    でも起動直後に「Application.CommandBars("Formatting").Controls(1)」が

    作成済みであるという保証が無いのなら

    エラーになっても仕方ないと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません