以下のプログラムは指定したセルが「月」だった場合、セルの色を変えるプログラムです。
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の設定なのか、それ以外に間違いがあるのか分かりません。
どうすればこのエラーを回避できるのでしょうか?
回答ではありません。
やりたいことが
『指定したセルが「月」だった場合、セルの色を変える』だけならば、
そんな複雑なプログラムを書く前に
Excelの「条件付き書式」機能を使えば済む話なので、
マクロの記録をして終了です。
とりあえず、変更した方がいいところを前スレ・前々スレで追加して挙げてます。
目を通してください。
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
特攻隊長まるるう 様
ありがとうございました。
物覚えの悪い質問者で申し訳ございません。
過去に質問した内容を元にもう一度データを確認してみます。
[spisok.txt]
ツイート | ![]() |