- ベストアンサー
VBAで別のシートに図形描画
お世話になっております。 現在VBAにおいて以下のものを作っております。 Sheet3で設定を行い、コマンドボタンを押下すると Sheet2に描画を行う ところが Range(Sheets("Sheet2").Cells(HightCnt, WidthCnt), Sheets("Sheet2").Cells(HightCnt, WidthCnt)).Select のところで 「実行時エラー'1004' Rangeメソッドは失敗しました」 となります。 (どうも同じシートSheet3に描画する分には問題ないようなのですが) コマンドボタン押下時に別シートにデータ出力等行うことはできないのでしょうか? もしできるのであれば方法をおしえていただけませんでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
お礼
ありがとうございます。 単純かもしれませんが、ソースコードをSheets3に戻し、Sheets("Sheet2").SelectとしてみましたがWorksheets("Sheet2").Select でNGとなってしまいました。 ちなみにソースコードを載せてみます。 (これでは分からないかもしれませんが) Sheets3(excel Object) '************************************************************** 'ウエハー描写ボタン押下時 '************************************************************** Private Sub WeferDrawBtn_Click() Call WeferDrawBtnFunc End Sub 標準モジュール '************************************************************** 'ウエハー描写ボタン押下時 '************************************************************** Public Sub WeferDrawBtnFunc() Dim WidthSize As Integer '横のサイズ Dim HightSize As Integer '縦のサイズ Dim WidthCnt As Integer '横のカウンタ Dim HightCnt As Integer '縦のカウンタ Dim CellName As String 'セルの名前 Dim CellData(110, 110) As Integer 'セルのデータ '========================================================== '縦と横のサイズを取得 '========================================================== WidthSize = Sheets("Sheet3").Range("B3") '横のサイズ HightSize = Sheets("Sheet3").Range("B2") '縦のサイズ '========================================================== '各セルの設定を取得 '========================================================== For HightCnt = 1 To 100 For WidthCnt = 1 To 100 If HightCnt <= HightSize And WidthCnt <= WidthSize Then 'セルの情報を取得 CellData(HightCnt, WidthCnt) = Val(Sheets("Sheet3").Cells(5 + HightCnt, 1 + WidthCnt)) Else CellData(HightCnt, WidthCnt) = 0 End If Next WidthCnt Next HightCnt
補足
こんなことはして良いか分かりませんが、すいません続きです。 '========================================================== '描画 '========================================================== Sheets("Sheet2").Select '------------------------------------------------- 'まずは消す '------------------------------------------------- Range(Sheets("Sheet2").Cells(12, 3), Sheets("Sheet2").Cells(120, 120)).Select '右下がりの線は描かない Selection.Borders(xlDiagonalDown).LineStyle = xlNone '右上がりの線は描かない Selection.Borders(xlDiagonalUp).LineStyle = xlNone '左横の線は描かない Selection.Borders(xlEdgeLeft).LineStyle = xlNone '上側の線は描かない Selection.Borders(xlEdgeTop).LineStyle = xlNone '下側の線は描かない Selection.Borders(xlEdgeBottom).LineStyle = xlNone '右側の線は描かない Selection.Borders(xlEdgeRight).LineStyle = xlNone '選択範囲の左右端以外の境界線は描かない Selection.Borders(xlInsideVertical).LineStyle = xlNone '選択範囲の上下端以外の境界線は描かない Selection.Borders(xlInsideHorizontal).LineStyle = xlNone '------------------------------------------------- '次に書いていく '------------------------------------------------- For HightCnt = 1 To 100 For WidthCnt = 1 To 100 'セルを選択する Range(Sheets("Sheet2").Cells(HightCnt + 12, WidthCnt + 2), Sheets("Sheet2").Cells(HightCnt + 12, WidthCnt + 2)).Select '使用する部分は描く If HightCnt <= HightSize And WidthCnt <= WidthSize _ And CellData(HightCnt, WidthCnt) = 1 Then '右下がりの線は描かない Selection.Borders(xlDiagonalDown).LineStyle = xlNone '右上がりの線は描かない Selection.Borders(xlDiagonalUp).LineStyle = xlNone '左横の線を描く With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '上側の線を描く With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '下側の線を書く With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '右側の線を書く With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End If Next WidthCnt Next HightCnt