Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10373 / 76734 ←次へ | 前へ→

【71908】Re:目的のシート以外をプレビュー表示したい
発言  kanabun  - 12/4/24(火) 15:32 -

引用なし
パスワード
   ▼うろ さん:
>内容が難しくて分かったような分からないような。。。
>
>自分の中で.selectのように、0を選び得ないような
>構文ではテーブルを1以上で最初に設定しといたほうが
>エラーが出にくいんだろうな・・・と

ちょっと勘違いがあるようなので、レスしときます。

> 問題はar()の変数がEmpty値になっていることだと思うのですが
そういうことだと思います。
>    n = Worksheets.Count
>    ReDim ar(n - 4)
>    For i = 5 To n
>      ar(j) = i
>       j = j + 1
>    Next i
なぜこの配列の宣言が適切でないのか?
説明のため、たとえば、実際のワークシートの枚数 が
6 だったとしましよう。
n = 6 だとします。
すると、
>    ReDim ar(n - 4)
は、具体的には ReDim ar(2) と宣言したことになります。
ReDim ar(2) は ReDim ar (0 to 2) という3つの要素を宣言して
いることになります。(Option Base 1 は使っていないものとして)
ここに、あなたのプログラムは
>    For i = 5 To n
>      ar(j) = i
>      j = j + 1
>    Next i
5〜6まで iをループさせ、Indexを要素に当てはめてます。
しかし,ReDim ar (0 to 2)で「3つの要素を宣言」したのに、
実際の代入は 最初の要素番号0 と2番目の要素番号1への代入
しかおこなわれていません。
要素番号→ 0   1   2  
要素内容→ [5]  [6]  [ ]  
したがって
ar() 配列は 未定義の要素を孕んでいますから、
> Worksheets(ar()).Select
がエラーになるのです。
Option Baseを 1 にするとかじゃなくて、
必要な要素数をもった配列を Redim すればいいのです。
たとえば、以下は 最初にご提示のコードの
> ReDim ar(n - 4)

ReDim ar(n - 5)
としているだけですが、エラーにならず5枚目以降のシート
をまとめて Previewできると思います。

Sub test_mod()
  Dim i As Integer
  Dim j As Integer
  Dim n As Integer
  Dim ar() As Variant
    n = Worksheets.Count
    If n <= 4 Then
      MsgBox "印刷できるシートがありません"
      Exit Sub
    End If
    ReDim ar(n - 5) '4ではなく5 に変更
    For i = 5 To n
    ar(j) = i
     j = j + 1
  Next i

 Worksheets(ar()).Select

 ActiveWindow.SelectedSheets.PrintPreview

End Sub

nが6のとき、5と6番目のシートを配列に入れればいいのですから、
上のように
Redim ar(0 to 1) と宣言すれば、 ar(0)= 5 : ar(1) = 6
Redim ar(1 to 2) と宣言すれば、 ar(1)= 5 : ar(2) = 6
Redim ar(5 to 6) と宣言すれば、 ar(5)= 5 : ar(6) = 6
てな具合で、
必要十分な要素数を宣言し、それぞれをIndexで埋めれば
始まりの要素番号が0であろうと、1であろうと、はたまた
5であろうと、問題なく動きます。
7 hits

【71900】目的のシート以外をプレビュー表示したい うろ 12/4/23(月) 18:56 質問
【71902】Re:目的のシート以外をプレビュー表示したい ちん 12/4/23(月) 21:35 発言
【71903】Re:目的のシート以外をプレビュー表示したい kanabun 12/4/23(月) 23:51 発言
【71904】Re:目的のシート以外をプレビュー表示したい kanabun 12/4/23(月) 23:55 発言
【71905】Re:目的のシート以外をプレビュー表示したい うろ 12/4/24(火) 11:22 お礼
【71906】Re:目的のシート以外をプレビュー表示したい ちん 12/4/24(火) 12:22 発言
【71907】Re:目的のシート以外をプレビュー表示したい うろ 12/4/24(火) 14:03 お礼
【71908】Re:目的のシート以外をプレビュー表示したい kanabun 12/4/24(火) 15:32 発言
【71909】Re:目的のシート以外をプレビュー表示したい うろ 12/4/24(火) 17:19 お礼

10373 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free