• ベストアンサー

シート・別ファイルを使用せずに、テキストデータを保存できないでしょうか。

オフィス2003のデータで、数ヶ月に一度項目名とセル番地が変わるので、デフォルト設定をするマクロを作ろうと考えています。 以下のコードで、モジュール内のコードを置換するので解決しそうですが、 「ツール」→「マクロ」→「セキュリティ」で「□Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れないといけないので、やりたくないのです。 ------------------------------------------ Sub tikan() Dim i As Integer With ThisWorkbook.VBProject.VBComponents(\"Sample\").CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = \"置換前\" Then .ReplaceLine i, \"置換後\" End If Next i End With Target.Save End Sub ------------------------------------------ シート・別ファイルを使用せずに、デフォルト設定のテキストデータを記録する場所はないものでしょうか? ご存知の方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

例えば、シートや別ファイルを使用せずに、『どこか』に「項目名」と「セル番地」を記録して、 マクロ実行時はその『どこか』を変数に取り込んで実行するようにしておき、 外部のマクロから「項目名」と「セル番地」を変更する時にモジュール内のマクロを修正せずに その『どこか』に記録した値を修正する事で対応したいという話でしょうか? その場合、いろいろあるとは思いますが Sub testW()   With ActiveWorkbook     .BuiltinDocumentProperties("comments").Value = "chk1 A1"     With .Sheets(1)       On Error Resume Next       With .TextBoxes("test1")         .Visible = True         .Delete       End With       On Error GoTo 0       With .TextBoxes.Add(0, 0, 0, 0)         .Visible = False         .Name = "test1"         .Text = "chk2 B1"       End With     End With     .Sheets(1).Names.Add "test2", "chk3 C1"   End With End Sub Sub testR()   Dim x   With ActiveWorkbook     x = .BuiltinDocumentProperties("comments").Value     x = Split(x)     MsgBox x(0) & vbLf & x(1)     x = .Sheets(1).TextBoxes("test1").Text     x = Split(x)     MsgBox x(0) & vbLf & x(1)     x = .Sheets(1).Names("test2")     x = Split(Mid$(x, 3, Len(x) - 3))     MsgBox x(0) & vbLf & x(1)   End With End Sub でも非表示シート(xlSheetVeryHidden)を変数値記録用として使う。というのがよくありそうなパターンだと思います。 ただ単にマクロの修正の手間を省きたいなら#1のWendy02さんに賛成です。

ddtqp
質問者

お礼

ありがとうございます! 期待していた回答で、とても助かりました! テキストボックス及びシートの非表示でためしました。 xlSheetVeryHiddenはVBAでしか再表示できないみたいですね。最高です!

その他の回答 (3)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

ただ単にテキストデータを記録するだけなら、モジュール内にコメントとして(行頭に ' を付けて)記述しておけばいいのでは?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

いきなりコードモジュールを変える話になっているが、本当にその路線しかないのか?簡単な別の方法はないのか質問してみたら。 やりたいことが、シート・セルを明示して、Aシート状態から->Bシート状態のように書いてないで質問しているが、読む方は判りにくくて フラストを感じる。もっと判りやすく説明できないのかな。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 > ThisWorkbook.VBProject.VBComponents(\"Sample\").CodeModule これは、禁じ手のひとつですが、それはともかくとして、 >オフィス2003のデータで、数ヶ月に一度項目名とセル番地が変わるので、デフォルト設定をするマクロを作ろうと考えています。 置換は、編集にありますが、カレントモジュール辺りで留めておきます。 不安がある場合は、カレントプロシージャレベルにします。 以下のようにして、なるべく上のほうに寄せます。 '------------------------------------------- Sub Test1()   Dim ret As Variant   Const mR1 As String = "A2" '定数を置く      ret = Range(mR1).Value + Range(mR1).Offset(, 1).Value   MsgBox ret End Sub '------------------------------------------- もし、モジュールレベルやグローバルレベルでの場合は、標準モジュールのプロシージャの外においてあげます。 Public Const mTITLE1 As String = "MS-Excel" '←必要に応じて書き換える Public Const mTITLE2 As String = "MS-Word" Public Const mTITLE3 As String = "MS-Access" このようにすると、そのプロジェクトで使うプローシージャすべての定数を換えることが出来ます。

ddtqp
質問者

補足

回答ありがとうございます。 説明足らずですみません。 デフォルト設定というマクロを実行すると、データシートを見ながら項目をクリックでき、項目名とその行列番号をひろってきて、以下のような感じでテキストデータを別シートに保存しています。 ------------------- P_name 圧力 P_row 6 P_col 33 ・ ・ ・ ------------------ 解析マクロを実行したときは、上記のテキストデータから 項目名・行列番号をひろって処理をするようになっています。 別シートが増えるのが駄目と言われましたので、 利用者が見えないような場所にテキストデータの記録をしたいのです。 無理難題ですみません。