いつもお世話様です。
こちらで教えていただいたマクロでフッダーの前に自動で罫線を引こうとしています。
前の質問は→http://okweb.jp/kotaeru.php3?q=1310420

下記のマクロを動かすと、1ページだけの時はちゃんとフッダーの上に罫線が引けますが、2ページ目になると「インデックスが有効範囲にありません」という実行時エラーが出てしまいます。
どこがいけないのでしょうか?

Sub 自動罫線TEST()
Dim BreakSu As Integer
Dim BreakSu2 As Integer
Dim B As Integer
Dim Rw As Long
Dim LastRow As Long

For N = 1 To 3

With Cells
.ClearContents
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With

Range("A1:D" & N * 30) = N & N & N 'TESTデータ挿入

LastRow = Range("A65536").End(xlUp).Row '最終行取得
BreakSu = ActiveSheet.HPageBreaks.Count '改ページ数取得
Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC" '改ページ数を増やすダミー
BreakSu2 = ActiveSheet.HPageBreaks.Count '増えた改ページ数取得

For B = 1 To BreakSu + 1
' MsgBox B & "-" & BreakSu + 1 & "-" & BreakSu2
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1 '改ページ前行取得(ここでエラー!)
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom) '改ページ前罫線挿入
.LineStyle = xlContinuous
End With
Next B

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = ClearContents 'ダミー消去
ActiveSheet.PrintPreview

Next
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (2件)

再度こんにちは。



姑息なコードを再アップしながらも納得いかず、
マイクロソフト技術情報を調べてみたところバグみたいですねぇ。

回避策として
追加した範囲の最後のセル(右下)を選択し、
Count,Location等を使用した後、最初のセルを選択

と書いてありましたので下記のようにしたらOKでした。
マイクロソフト、しっかりせんかいっ!(^^;;;


●のコードを追加。
-----------------------------------------------

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC"


●Range("A1").SpecialCells(xlCellTypeLastCell).Select


BreakSu2 = ActiveSheet.HPageBreaks.Count

For B = 1 To BreakSu + 1
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
Next B

 ● Range("A1").Select

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")).ClearContents ' = ClearContents
ActiveSheet.PrintPreview

Next
End Sub
---------------------------------------------

下記マイクロソフトサイトも覗くこと!
以上です。

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

何度もありがとうございます!!!!

マイクロソフトのサイト見ました。
バグだったんですかあ・・・・。

でも、この回避方法だと、Application.ScreenUpdating = False を使ってはいけないと書いてました。

質問に書いたコードはテスト用ですが本番は画面が動かないようにApplication.ScreenUpdating = Falseを入れるつもりだったんです。

でNo1で教えていただいた
ActiveWindow.View = xlPageBreakPreview '改ページプレビュー
ではそんな制限はないですよね?(実験しましたが大丈夫のようでした)

お礼日時:2005/04/05 16:07

こんにちは。



では下記のように、●のコードを追加してみてください。
-------------------------------------------------

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC"


●ActiveWindow.View = xlPageBreakPreview '改ページプレビュー


BreakSu2 = ActiveSheet.HPageBreaks.Count

For B = 1 To BreakSu + 1
' MsgBox B & "-" & BreakSu + 1 & "-" & BreakSu2
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
Next B


● ActiveWindow.View = xlNormalView  '改ページから標準へ


Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = ClearContents
ActiveSheet.PrintPreview
Next
End Sub
-------------------------------------------

改ページプレビューを表示して強制的に改ページ位置を取得しています。

以上です。
    • good
    • 0
この回答へのお礼

taocatさまには本当にお世話になりました。
おかげさまで無事出来上がりました!

感謝感激です。
ありがとうございました。

お礼日時:2005/04/05 15:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAで、アクティブなBOOKのファイル名を取得し

エクセルのVBAを使用して、選択されている、BOOKのファイル名を取得し、下記のように編集してA1セルに入れたいのですが、可能でしょうか?


BOOKのファイル名が「大阪_たこ焼き_1234.xls」の場合

大阪_と.xlsをは省いて、「たこ焼き_1234」がA1セルに入るようにしたい。

Aベストアンサー

拡張子なんでもござれ!
Sub TheBody()
Const xSeparator = "_"
Const xPeriod = "."
Dim KitCut As Variant
KitCut = Split(ActiveWorkbook.Name, xPeriod)
KitCut = Split(KitCut(0), xSeparator)
Range("A1").Value = KitCut(1) & xSeparator & KitCut(2)
Columns("A").AutoFit
End Sub

QRange(Cells(32, 14)).Value = "S" がエラーになります

よろしくお願いします。いつもgooの皆さんに大変お世話になっています。
エクセルは2013です

Range(Cells(32, 14)).Value = "S" がエラーになります
メッセージは「Range メソッドは失敗しました Worksheet オブジェクト」です

32行目の14列にSを書き込みたいので、ネットで調べてやってみたのですが
よく理解できません

14という数値を使って書きたいのですが、どう書き換えたら良いでしょうか
どなたか教えてください

Aベストアンサー

この場合一つのセルですから
Cells(32, 14).Value = "S"
これだけです。Rangeは不要です。

QExcelVBA:自己のBook名を取得したい

WindowsXP-Proです。
Excelヴァージョンは2003です。

ExcelVBAでコーディングしています。
で、自分自身(つまり、このVBAコードを記述しているExcel本体)のBook名を取得したいのですが、何か関数は用意されていますでしょうか?

自分自身のBook名を取得したい理由は、VBAコードを記述しているExcel本体のファイル名(Book名)の名前が変更されても、VBAが正常に機能するように、今現在のBook名を取得したいのです。

複数のExcelファイルを、このVBAで操作しているため、
Workbooks("本体のBook名").Activate
を用いており、仮にファイル名(本体のBook名)の名前が変更されても、VBAが正常に機能できるように、"本体のBook名"部分を固定ではなく、可変で持てるようにしたいからです。

Aベストアンサー

Public Sub Auto_Open()
  MsgBox ActiveWorkbook.Name
  MsgBox ThisWorkbook.Name
End Sub

Private Sub Workbook_Open()
  MsgBox Me.Name
End Sub

いずれも、ブック名が表示されました。

QExcelの列'A' 'B' 'C'...や、行'1' '2' '3'...の文字の大きさや種類

Excel2002を使っていますが、Excelの上にある列'A' 'B' 'C'...や、左にある行'1' '2' '3'...の文字の大きさや種類は変えることはできるのでしょうか?もし、変えれるのでしたらどうやって変えるのですか?

Aベストアンサー

「書式」「スタイル」「標準」の状態で「変更」を押して「フォント」の内容を変更してください。
列と行の文字フォントとサイズが変更されます。

Q他のワークシート名の取得方法 (VBAを使用せずに)

VBAを用いずに、ワークシート関数のみでワークシート名を取得できないか探しています。

自分のシート名は、以下の出力結果の一部より取得することができました。
=CELL("filename")

しかし、他のシート名を取得する方法が思いもつきません。

VBAを用いずにシート名を取得することはできないのでしょうか?

Aベストアンサー

Excel2000でしたら、
1.[挿入]-[名前]-[定義] から、名前を2つ定義します。
  ・名前:PPP  参照範囲:=GET.WORKBOOK(1)
  ・名前:QQQ  参照範囲:=GET.DOCUMENT(88)
2.A1 に =SUBSTITUTE(INDEX(PPP,ROW()),"["&QQQ&"]","") と入力します。
3.A1 を下方にドラッグコピーすると、シート名が一覧で表示されます。

例えば3枚目のシート名のみを取得する場合は、任意のセルに
=SUBSTITUTE(INDEX(PPP,3),"["&QQQ&"]","") と入力します。

※マクロ関数というものですが、最近のバージョンにこれが付帯されているのかどうか
  わかりませんが。   ^_^;

Qエクセル マクロについて Range と Cells について 

エクセル2003 OSはXP を使っています。
以下のとおり、全く同じコードにも関わらず、前者は動き、後者は動きません。
なお、ClearContents を Clear に変えても Copy に変えても、同様の結果です。
しかし、Cells を使わずに、"A4:C10" 等、番地で直接書くと、後者も動きます。
後者のコードを Cells で動かす方法は無いでしょうか?
また、何故こんな現象がおこるのでしょうか?
なお、シート名などは、間違いありません。
どなたか教えてください。

Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 4)).ClearContents

Sheets("検討データ").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents

Aベストアンサー

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet2").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
はエラーになりました。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Worksheets("sheet2").Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
で動きました。
明示しないと、Rangeの( )の中のCellsをSheet1のRangeと解釈するので、Sheet2のActiveteと矛盾する。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
もだめでした。
ForNextにしたのは、qweの影響でないと思ったので
変化させました。

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets(...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセルのマクロ Range("A1").End(xlDown).rowで列を削除

A列の一番下のデータの次の行から
F列の一番下のデータの行まで削除したいのですが
Rows(" & Range("A1").End(xlDown).row+1 & ":" & Range("F1").End(xlDown).Row & ").Delete Shift:=xlUp
でうまくいきません
どうすればいいのですか?

Aベストアンサー

Rows(Range("A1").End(xlDown).Row + 1 & ":" & Range("F1").End(xlDown).Row).Delete Shift:=xlUp
でどうでしょうか。
Rows()内の最初と最後の("&~&")が不用かと…。

ちなみにxlDownだと途中に空欄があった場合、最下行は取得できません。
xlUpを使ったほうがより確実だと思いますよ。

Aend = Cells(Rows.Count, 1).End(xlUp).Row + 1
Fend = Cells(Rows.Count, 6).End(xlUp).Row
If Aend <= Fend Then Rows(Aend & ":" & Fend).Delete Shift:=xlUp

QVBAでアカウント名を取得する方法

VBAで処理したEXCELブックをデスクトップに自動保存しようとしています。VBAで現在作業中のユーザーアカウント名を自動で取得する方法を教えていただきたいのですが。

デスクトップ上にブックを保存するには、パスを記述すればよいのですが、現在PC毎にユーザーアカウントを設定しユーザー名が異なっています。
このため、PC毎にこのユーザー名をデスクトップへのパスに入れ込まなければなりません。毎回キーボードからこのユーザー名を入力する方法もありますが、自動的にユーザー名を取得し、正しいパスを指定する方法を検討しています。
どなたか、VBAでこのユーザー名を取得する方法が有れば教えていただきたいのですが。
よろしくお願いいたします。

Aベストアンサー

Environ関数で、環境変数[USERNAME]を取得する。

MsgBox Environ("USERNAME")

QRange("A1")⇔cells(1,1)の変換。

EXCELのマクロについて質問します。
Range("A1")⇒(1,1)
cells(1,1)⇒("A1")
に一発変換する方法を教えて下さい。
時間があるかた宜しくお願いします。

Aベストアンサー

こんなのでよろしいでしょうか?
range("A1") → Range("A1").Row & "," & Range("A1").Column
cells(1,1) → Cells(1, 1).Address(False, False)
()や""は付けていません


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報