For文を使用したExcelシート設定について

解決


魚武  2006-06-29 20:13:03  No: 132089

以下のプログラムは指定したセルが「月」だった場合、セルの色を変えるプログラムです。

Private Sub Command3_Click()
    Dim Book            As New Excel.Application
    Dim Excel           As String
    Excel = "C:\Excel13\Excel13.xls"
    Book.Application.Visible = True
    Book.Application.Workbooks.Open FileName:=Excel
    For DD = 1 To 15
        Book.Worksheets(2).Cells(DD, 2).Select  ←
        If Cells(DD, 2) = "月" Then
            With Selection.Interior
                .ColorIndex = 40
                .Pattern = xlSolid
            End With
        Else
            With Selection.Interior
                .ColorIndex = 0
                .Pattern = xlSolid
            End With
        End If
    Next DD
    Book.Workbooks(1).Close SaveChanges:=True
    Book.Quit
    Set Book = Nothing
End Sub

以下のプログラムを入力しますと
      実行時エラー '1004':
      RangeクラスのSelectメソッドが失敗しました
というエラーメッセージが表示されます。
エラーの原因がFor文の設定なのか、Cellsの設定なのか、それ以外に間違いがあるのか分かりません。
どうすればこのエラーを回避できるのでしょうか?


いな  2006-06-29 20:46:12  No: 132090

回答ではありません。

やりたいことが
『指定したセルが「月」だった場合、セルの色を変える』だけならば、
そんな複雑なプログラムを書く前に
Excelの「条件付き書式」機能を使えば済む話なので、
マクロの記録をして終了です。


特攻隊長まるるう  2006-06-29 21:13:00  No: 132091

とりあえず、変更した方がいいところを前スレ・前々スレで追加して挙げてます。
目を通してください。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200606/06060092.txt

>      RangeクラスのSelectメソッドが失敗しました
Select はシートがアクティブになってフォーカスとかを受け取れないと
失敗したと思います。
セルの値を取得するだけなら選択状態にする必要はありません。
 # マクロの記録で得られるコードは、不必要なコードをたくさん含んでいたり、
 # VB から操作するには不都合なコードを含んでいたりします。そのまま
 # 使わず、エクセルの内部構造を理解して変更する必要があります。
>    Dim Excel           As String
Excel の名前空間とかぶるので、このような変数名は使用しないようにしてください。
[VB6.0]
Private Sub Command3_Click()
    Dim ExcelApp        As New Excel.Application 'Excel Application
    Dim ExcelWb         As Excel.Workbook   'Excelブック
    Dim ExcelSheet      As Excel.Worksheet  'Excelシート
    Dim ExcelRange      As Excel.Range      'Excelセル
    Dim strFileName     As String
    Dim DD              As Integer
    strFileName = "C:\Excel13\Excel13.xls"
    
    With ExcelApp 'Application の操作
        .Visible = True
        Set ExcelWb = .Workbooks.Open(Filename:=strFileName)
    End With
    
    With ExcelWb 'Workbook の操作
        Set ExcelSheet = .Worksheets(2) '←↓インデックス(数値)でなく、名前が決まっているなら名前で指定した方が確実
        'Set ExcelSheet = .Worksheets("Sheet2")
        With ExcelSheet 'Worksheet の操作
            For DD = 1 To 15
                Set ExcelRange = .Cells(DD, 2)
                With ExcelRange 'セルの操作
                    If CStr(.Value) = "月" Then
                        With .Interior '書式の操作
                            .ColorIndex = 40
                            .Pattern = Excel.Constants.xlSolid
                        End With
                    Else
                        With .Interior
                            .ColorIndex = 0
                            .Pattern = Excel.Constants.xlSolid
                        End With
                    End If
                End With
            Next DD
        End With
    End With
    
    ExcelWb.Close SaveChanges:=True 'Workbook を閉じる
    Set ExcelWb = Nothing
    
    ExcelApp.Quit 'Application を閉じる
    Set ExcelApp = Nothing
End Sub


魚武  2006-06-29 22:15:31  No: 132092

特攻隊長まるるう 様

ありがとうございました。

物覚えの悪い質問者で申し訳ございません。
過去に質問した内容を元にもう一度データを確認してみます。
[spisok.txt]


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加