- ベストアンサー
シート・別ファイルを使用せずに、テキストデータを保存できないでしょうか。
オフィス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 ------------------------------------------ シート・別ファイルを使用せずに、デフォルト設定のテキストデータを記録する場所はないものでしょうか? ご存知の方、教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例えば、シートや別ファイルを使用せずに、『どこか』に「項目名」と「セル番地」を記録して、 マクロ実行時はその『どこか』を変数に取り込んで実行するようにしておき、 外部のマクロから「項目名」と「セル番地」を変更する時にモジュール内のマクロを修正せずに その『どこか』に記録した値を修正する事で対応したいという話でしょうか? その場合、いろいろあるとは思いますが 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さんに賛成です。
その他の回答 (3)
- nag0720
- ベストアンサー率58% (1093/1860)
ただ単にテキストデータを記録するだけなら、モジュール内にコメントとして(行頭に ' を付けて)記述しておけばいいのでは?
- imogasi
- ベストアンサー率27% (4737/17069)
いきなりコードモジュールを変える話になっているが、本当にその路線しかないのか?簡単な別の方法はないのか質問してみたら。 やりたいことが、シート・セルを明示して、Aシート状態から->Bシート状態のように書いてないで質問しているが、読む方は判りにくくて フラストを感じる。もっと判りやすく説明できないのかな。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 > 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" このようにすると、そのプロジェクトで使うプローシージャすべての定数を換えることが出来ます。
補足
回答ありがとうございます。 説明足らずですみません。 デフォルト設定というマクロを実行すると、データシートを見ながら項目をクリックでき、項目名とその行列番号をひろってきて、以下のような感じでテキストデータを別シートに保存しています。 ------------------- P_name 圧力 P_row 6 P_col 33 ・ ・ ・ ------------------ 解析マクロを実行したときは、上記のテキストデータから 項目名・行列番号をひろって処理をするようになっています。 別シートが増えるのが駄目と言われましたので、 利用者が見えないような場所にテキストデータの記録をしたいのです。 無理難題ですみません。
お礼
ありがとうございます! 期待していた回答で、とても助かりました! テキストボックス及びシートの非表示でためしました。 xlSheetVeryHiddenはVBAでしか再表示できないみたいですね。最高です!