プロが教える店舗&オフィスのセキュリティ対策術

下記のマクロを書いていますがエクセル95では多分うまくいったのですが
2000で動かすとエラーになります。
tuki = Sheets("mmm").Cells(5, 12).Text→ここでインデックスが有効範囲にありません
5行目の12列目には、200201データが入っています。書式は###です。
原因を教えてください。
なにをしているか記述の意味がわかれば教えてください。



Dim i, C_COUNT, folda, work, t
folda = "C:\test\"
tuki = Sheets("mmm").Cells(5, 12).Text
tuki = Val(Right(tuki, 2))
If tuki = 12 Then
tuki = 1
Else
tuki = tuki + 1
End If
tuki = Format(Str(tuki), "00")
Workbooks.Add
F_NAME = "Kei" + tuki + "tuki.XLS"
ActiveWorkbook.SaveAs Filename:=folda + F_NAME, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

A 回答 (2件)

各行に意味を書いてみました。


L5の数値の下2桁の月の翌月をファイル名の一部としてBookを保存しようとしているみたいです。

>インデックスが有効範囲にありません のエラー
Sheet("mmm")のmmmはシート名と一致していますか。全角と半角で違っている可能性があります。
Excel2000でこの辺りが厳格になったのかもしれません。(自信なし)

シートでシートタブをクリックしてシート名を反転させてコピー。
それをこのコードのSheet("mmm")の『mmm』部分に貼り付ければうまくいくかもしれません。
後は、tukiの変数宣言が質問の中には見当たりません。

記述の意味
   ↓
  '*** 配列の定義。みんなバリアント型になっている。これでもいいが、ちゃんと宣言したほうがいい。
  '*** tukiについては、Dimがない? 書くなら、Dim tuki。これはバリアント型の必要あり
  Dim i, C_COUNT, folda, work, t
  '*** フォルダを定義
  folda = "C:\test\"
  '*** tukiはシート名mmmのL5の文字 = 200201
  tuki = Sheets("mmm").Cells(5, 12).Text
  '*** tuki = 1 。200201の右2桁『01』にして、数値にしている
  tuki = Val(Right(tuki, 2))
  '*** 翌月を求めている
  If tuki = 12 Then
    '*** 12月なら翌月は1月
    tuki = 1
  Else
    '*** 12月以外ならtukiに1加算した月が翌月
    tuki = tuki + 1
  End If
  '*** tukiを数値から前ゼロの文字に変えている
  tuki = Format(Str(tuki), "00")

  '*** 新規Bookを追加
  Workbooks.Add
  '*** F_NAMEは Kei02tuki.XLS になる
  F_NAME = "Kei" + tuki + "tuki.XLS"
  '*** Bookをfoldaにファイル名F_NAMEで保存している
  ActiveWorkbook.SaveAs FileName:=folda + F_NAME, _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False

この回答への補足

早速の回答ありがとうございます。
もうひとつ教えてください。
下記のマクロで型が一致していませんがでます。
M_KAKOBA(count) = "Sheet" + i(3行目の5列には1が入っていま。)

何が原因でしょうか。
Dim i, C_COUNT, folda, work, tuki
  For count = 1 To C_COUNT 'C_COUNT
Windows("test.xls").Activate
Sheets("aaa").Select
Cells(3, 5) = count
i = count
M_KAKOBA(count) = "Sheet" + i

補足日時:2002/04/04 21:15
    • good
    • 0

M_KAKOBA(count) は文字列ですよね。

iは数値。

多分、

 M_KAKOBA(count) = "Sheet" & i

でしょう。文字列と文字列(または数値)の結合は & を使います。
    • good
    • 0

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