- ベストアンサー
VBAで別のシートに図形描画
お世話になっております。 現在VBAにおいて以下のものを作っております。 Sheet3で設定を行い、コマンドボタンを押下すると Sheet2に描画を行う ところが Range(Sheets("Sheet2").Cells(HightCnt, WidthCnt), Sheets("Sheet2").Cells(HightCnt, WidthCnt)).Select のところで 「実行時エラー'1004' Rangeメソッドは失敗しました」 となります。 (どうも同じシートSheet3に描画する分には問題ないようなのですが) コマンドボタン押下時に別シートにデータ出力等行うことはできないのでしょうか? もしできるのであれば方法をおしえていただけませんでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
関連するQ&A
- VBAで実行時エラー1004が出ます
VBAで実行時エラー1004が出ます。 「Rangeメソッドは失敗しました。Worksheetオブジェクト」です。 あらゆる可能性を調べたのですが、分かりません。誰か教えて頂けますでしょうか? 下記コードの「Cells(m, 7) =・・・」の部分がエラーになりました。 Sub ボタン1_Click() Dim 現シート As Worksheet ~ 現シート.Activate Cells(m, 7) = WorksheetFunction.VLookup(現シート.Range(現シート.Cells(m, 4)).Select, 現シート.Range(現シート.Cells(4, 104), 現シート.Cells(15, 107)).Select, 4, False) ~ End Sub 何卒宜しくお願いいたします。
- 締切済み
- Excel(エクセル)
- VBAにて別シートに貼り付けたいのでができません
今開いているファイル(A)内のシート(依頼)にVBAを以下の用に記述しました。 これをデスクトップにあるファイル(提出)内のシート(データ更新)に貼り付けたいのですが できません。 「インデックスが有効範囲にありません。」と表示されます。 どこが悪いか教えて下さい。 sub 取り込み( ) Sheets("依頼").Range(Cells(15, 2), Cells(30, 21)).Copy Workbooks.Open Filename:="C:\Documents and Settings\Administrator\デスクトップ \作業中\提出.xls" Sheets("データ更新").Select Range(Cells(15, 2), Cells(15,2)).Select ActiveSheet.Paste Application.CutCopyMode = False End sub
- ベストアンサー
- オフィス系ソフト
- エクセル2000VBA コマンドボタンがうまく動きません
こんにちは、VBA初心者です。 2枚のシートがあり、「入力」というシートの任意のセルを、「出力」という別シートにコピーするという作業をコマンドボタンによって行いたいと思っています。 自分で作ってみたものは、このようになります。 Private Sub 任意の行のコピー・印刷_Click() Application.ScreenUpdating = False 'セル内容コピー Selection.Copy Sheets("出力").Select Range("A9").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("入力").Select ActiveCell.Offset(0, 1).Select Application.CutCopyMode = False Selection.Copy Sheets("出力").Select Range("C9").Select (以下略) ところが、これだと 「実行時エラー1004 RangeクラスのSelectメソッドが失敗しました」と表示され、デバッグをかけると6行目のRange("A9").Selectが黄色く反転した状態になります。 どうしてでしょうか。 同じ内容のものをマクロで登録し、実行すると、何の問題もなく動くのですが… ほとほと困っております。 どうかよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ExcelVBA:ワークシートに付けたコマンドボタンから、セル全体をコピーするコード
ExcelVBAでワークシートに付けたコマンドボタンを押すと、ワークシートを指定し、コピーするプログラムを作りたいのですが、「実行時エラー'1004':RangeクラスのSelectメソッドが失敗しました。」というようなエラーが出て動きません。 プログラムは以下の通りです。 Private Sub CommandButton1_Click() Sheets("Sheet1").Select Cells.Select Selection.Copy End Sub どのようにすればよいでしょうか? 回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 別シートに罫線がひけない
表題どおりなのですが、別シートに罫線がかけません。 例えばSheet1にあるボタンをクリックするとSheet2に罫線をかく。 (コードは下記参照)としたときにエラーが発生します。 「1004 Rangeメソッドは失敗しました。」 そのため「ActiveSheet.」をはずしてみると”Sheet1”に描画されてしまいます。 なにか宣言が必要なのでしょうか? Private Sub CommandButton1_Click() Worksheets("sheet2").Activate '.Selectでも同じ For i = 4 To Range("G30").Column ActiveSheet.Range(Cells(4, i), Cells(30, i)).Borders(xlLeft).Weight = xlThin ActiveSheet.Range(Cells(4, i), Cells(30,i)).Borders(xlLeft).LineStyle = xlContinuous Next End Sub
- ベストアンサー
- Visual Basic
- アクティブでないシートのセルを選択
Excel VBAでアクティブでないシートのセルをSelectすることはできないのでしょうか。 Selectメソッドというのは,もともとそういうものなのでしょうか。 エラー: 「RangeクラスのSelectメソッドが失敗しました。」 コード Sub aaa() With Worksheets("Sheet2") .Range(.Cells(44, 1), .Cells(48, 21)).Select End With End Sub
- ベストアンサー
- その他MS Office製品
- VBA シートセレクト方法
お願いします。 エクセルVBAにて請求書確認というシートの数字を基準として 請求書入力という違うシートで同じ数字があった場合 請求書入力の特定なセルを青色で塗りつぶしたいのですが 下記のように書くとデバックしてしまいます。 '請求入力NO.チェック処理 For i = 4 To 2000 For N = 4 To 2000 If Sheets("請求入力").Cells(N, 1) = Cells(i, 6) Then Sheets("請求入力").Cells(N, 5).Select ' Range("A16").Select With Selection.Interior .ColorIndex = 8 .Pattern = xlSolid End With End If Next N Next i 説明 Sheets("請求入力").Cells(N, 5).Selectというところで 実行時エラー'1004': RangeクラスのSelectメソットが失敗しました 以上のようにエラーになります。 請求書確認とゆう同じシートで Range("A16").Selectと設定するとA16が青く 塗りつぶされます。 どのように修正すれば宜しいのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい
シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub
- ベストアンサー
- Visual Basic
- エクセルVBAで選択していないシートのセルコピー
エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?
- ベストアンサー
- その他(ソフトウェア)
- VBA Selectの省略
こんばんは、VBAのSelectメソッドの省略について質問させてください。 VBAにおいてSelectを使用すると処理が遅くなると聞いたことがあるので、なるべくSelectを避けるべく以下のVBAを記述しました。 内容は、シート「りんご」のA列~AN列に入っているデータを見出し項目を含めてコピー、そしてSheet1にペーストするというものです。(行数は毎回変化します。) ところが、以下を実行したところ、コピー&ペーストされたのは1行目の見出し項目のみでした。一方、「Range("A1:AN" ~」の前に「Sheets("りんご").Select」を入れたところ、全てのデータをコピー&ペーストすることができました。 この場合は、Selectを使用せずデータをコピー&ペーストすることは不可能なのでしょうか…?!どなたかご回答いただけると嬉しいです、よろしくお願いいたします。 '対象データのコピー&ペースト Sheets("りんご").Range("A1:AN" & Cells(1).CurrentRegion.Rows.Count).Copy Sheets("Sheet1").Paste
- ベストアンサー
- Excel(エクセル)
お礼
ありがとうございます。 単純かもしれませんが、ソースコードを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