タグ: EXCEL を抽出しています。
Total: 10

旗。

2009/4/22 15:54
EXCELの話。検索で飛んできた方々、きっと役に立ちません。すみません。

・ブックを開いて何も変更してないのなら、確認メッセージ出さずに閉じたい。
・とはいっても、Openイベントで色々やってるんで、Openイベントの終了時に、Thisworkbook.Saved = Trueにしている。
・なぜかすぐにFalseになる。

どういう時に起きるか。苦労して調べた。
入力規則リストがあるセルがアクティブな状態で保存されているとFalseにならない。どのセルに移ろうが。
入力規則リストがないセルがアクティブな状態で保存されていて、その後、入力規則リストがあるセルへ移るとFalseになる。

ここで。
入力規則には、名前を定義したセル範囲を参照させている。そのセル範囲参照式に、OFFSET関数を使っているのが怪しい気がする。

仮説。
入力規則のリストの生成タイミングは、そのセルが最初にアクティブになった瞬間。でも、あるセルがアクティブになったら、そのシート全体の入力規則リストも一緒に生成される。なぜか。
で、入力リストの生成は、ブックに対する変更ととらえられ、SavedプロパティもFalseになってしまうと。

というわけで、ブックを開けた瞬間に、入力規則リストのセルがアクティブになっているものは、Openイベントが終わるまでに、入力規則リストが生成され、Openイベントの終了を迎え、SavedプロパティがTrueにできる。なので、以降Falseにならない。
逆にブックを開けた瞬間に、入力規則リスト以外のセルがアクティブになっていると、入力規則リストが生成される前に、Openイベントが終了、その後、入力規則リストのセルがアクティブになった際に初めてリストが生成されるものだがら、SavedプロパティはFalseに。

以上を踏まえてどうするか。
VBAで、入力規則の生成を、Openイベント中に強制的にできればよいのではないか。でも、生成とは具体的にどうすりゃいいのかわからないので、全Nameオブジェクトに対して、ReferToRangeをして、ダミーのRangeObjectを作る。→だめだった。

所詮、仮説に過ぎないので、対処療法。
・各シート、常に入力規則リストがあるセルをアクティブにして保存することにする。

…いずれ暇な時になんか解決策がないか、持ち越し。

背。

2009/1/14 13:51
エクセルの話。エクセルは背景画像を指定できるが、印刷できないという、嫌がらせに対抗するための知恵。

たとえば、なんか表があったとして、それをPCに画像としてとりこんで、内容の入力はエクセルでやりたくて、最終的に印刷したい場合とか。

1.同じ画像で、入力時用(低解像度)と印刷用(高解像度)を用意する。

2.シートの背景に、入力時用の画像を指定する。背景に指定する画像の大きさはエクセル側で変更不可なので、画像ソフトかなんかを使って画像の方のサイズを直接変更してやる。

3.背景画像に合わせて入力しやすいように、行列、の高さを調節したり、セルの結合したりして合わせる。この作業はやや面倒。

4.テストデータをいれて、各セルの書式を整える。

5.印刷したい部分(以下、入力領域)をコピーし、行列の高さを変えても影響しない場所に貼り付ける。入力領域の右下くらいがよい。
例)A1:Z10が印刷したい範囲だとしたら、AA11:AZ20にコピーする。

6.再度入力領域をコピーし、5で貼り付けた場所(以下、印刷領域)にリンク貼り付けをする。

7.印刷領域では、ブランクに0が表示されているはずなので、=If(A1="","",A1)などの数式に変更し、ブランク時に何も表示されないようにする。一箇所だけ変更したらあとは数式のみのコピーで良い。

8.印刷領域のみを印刷範囲として設定する(入力領域は印刷範囲に設定しない)。

9.ヘッダーに印刷用の画像を挿入する(ページ設定のヘッダーフッタータブ)。

10.印刷プレビューをみながら、ヘッダーに指定した画像のサイズを変更したり、画像のトリミング位置も調整する。同時に、文字もうまくあうように%や余白を調整する。この作業が肝心で、コツがいる。

11.どうしても合わない部分が出てくるはずなので、印刷プレビューを閉じ、実際にシートの印刷領域の行列の高さを変えて、印刷プレビューを見て調整するを繰り返す。

12.暇だったら、普段は入力領域以外を非表示にして、印刷直前だけ表示するというようなマクロを作る。印刷領域がずっと表示されていても気にならないって人はほっといても可。

自分に対する覚書なんで、説明わかりづらいと思います。困ってて、試してみたい、試した結果うまくいかなくても怒らないって方には、質問してもらえればできるだけ答えます。

※各元ファイルは一度つかってしまえば要りません。エクセルファイルの容量は結構大きくなります。どんな形式を貼り付けようともビットマップで持っているらしいです…。

隠。

2008/8/16 14:45
知ればなんともないのだが、かなりの時間を潰してしまった。

EXCEL。文書の一部分、図や文書がどうしても印刷されなかった。印刷プレビューでみると、セクションの表示が崩れててた。セクションの段組は保持されているようだが、文字と図が現れないので、その分詰まって崩れてしまってる。

かなり、様々、色々調べてるうちに、印刷されない部分には、文書と図の下に、黒い点線がついていることに気付く。これはなんだ?

「隠し文字」という書式設定の一つらしい。フォント設定の画面で容易に操作できた。なぜ、その一部分だけonになっていたかはわからないが、webから資料をひっぱってきて、ペーストした時の加減かもしれない。

こんな単純なことだが、VisualBasicEditorまでひっぱりだして、なんかのプロパティで、Printなんとかとか、Hideなんとかが、Falseになってるんじゃないかと、本当に無駄な時間を費やした。

更。

2008/4/19 11:09
今ちょっと気付いたので追記、挿入。mixiから飛んでわざわざ見に来てくれる方なんてそんなにいらっしゃらないとは思うが、私の新着日記で、一文字タイトル以外や市区町村名以外のタイトルは、単なるブックマークです。mixiが拾ってしまいます。そのうちなんとかなると思うのですみません。m(__)m折角飛んで見てもらってもなんも書いてません。

以下本文。

今更こんなことでつまづくとは思わなかったので覚書。
毎度EXCELさん。コントロールツールボックスのラジオボタン(オプションボタン)について。

シート上にオプションボタンを適当に配置していくと、どれか一つでもオンにすると他の全てがオフになる。これはいいのだが、グループで分けたいことがある。そんなとき。

「各ボタンに同じグループ名をつけた物同士で、わけることができる」
と、調べた結果。

・誤
各ボタンをグループ化して、グループアイテム名をつけていた。

・正
各ボタンのプロパティウィンドウから「GroupName」を設定する。

おかしいおかしいと、無駄な時間をまた費やしてしまった。というよりむしろ、以前は知ってたはずなのに、全然覚えてないのが凄い。

位。

2008/4/16 11:20
EXCELさんはポイントという単位を使ってらっしゃる。

A4縦は
297mm=827.716535433071ポイントらしい(CentimetersToPointsメソッド使用)。

で、あるシート。

印刷可能範囲の高さ
867.75ポイント

拡大縮小なし、100%のページ設定。
なぜ、

A4紙の長さ<印刷可能範囲の高さ

なのだ。加えて上下余白もあるのに。解けそうにない謎。

示。

2008/4/13 12:56
EXCEL。コマンドボタンについて。

Captionに文字を入れると、上下にかなり余白があく。これをなんとかならないかと調べたが、なんともならないようだ。

・ラベルをボタンの上に貼り付けて、ラベルを後ろ、ボタンを前にして、ボタンの背景は透過させる。
→一見よさそうだが、クリックした後の表示が変になる。使えない。
→ラベルを上に表示させると、そもそもクリックができなくなる。ラベルクリックのイベントにコード書いたところで、ボタンを押した動きが見えないので不許可。

・トグルボタンにする。
→押したら凹んだままになるので、
Private Sub ToggleButton1_Click()
 ToggleButton1.Value = False
End Sub
を記述。だめ。結局、コマンドボタンと同じでcaptionの上下の余白が邪魔。

こんな小手先の技を使わなければなんとかならないのが不便。

隠。

2008/4/12 11:28
EXCEL。個人的覚書ですが、役に立つことが万に一でもあれば。というわけで、内容は全然保証しませんのでその上で。

●WorkSheetオブジェクト
・DrawingObjectsコレクション(?)…シート上の全図形やボタンとか
・DrawingObjectオブジェクト…なんだったっけ。いつか調べる。→存在しなかった。
見つけたのみで実際まだ活用してない。というかなんだったかよく覚えてない。思い出したら追記。
→Shapesとの違い。Shapesには、ドロップダウンのボタンも含まれるよう(だからShapes.Deleteはエラーになるのか?)。各アイテムはShape。
→DrawingObjectsにドロップダウンのボタンは含まれない。各アイテムはDrawingObjectオブジェクトではなく、Lineだったり、OLEObjectだったり。
→Shape.DrawingObjectで、DrawingObjectsから取得できる各アイテムを取得可。

┌DrawingObjects┐
|┌──────┼──OLEObjects
||OLEObject   |    |
||OLEObject   |    |
|└──────┼──┘
|              |
|┌──────┼──Lines
||Line        |    |
|└──────┼──┘
|              |
|┌──────┼──Ovals
||Oval        |    |
||Oval        |    |
||Oval        |    |
|└──────┼──┘
|              |
|…            |
|              |
|…            |
└───────┘
・Ovalsコレクション…シート上の全円
・Ovalオブジェクト
Set Oval = Worksheet.Ovals.Item("円名")
・Linesコレクション…シート上の全線
・GroupObjectsコレクション…シート上のグループ化すべてのもの
・GroupObjectオブジェクト…シート上の一つのグループ
Set GroupObject = Worksheet.GroupObjects.Item("グループ名")
・TextBoxesコレクション…シート上の全テキストボックス
・TextBoxオブジェクト…
WorkSheet.TextBoxes.PrintObject = False
シート上の全テキストボックスが印刷されなくなる。

●OLEObjectオブジェクト
・CommandButtonオブジェクト
Set CommandButton = OLEObject.Object
ActiveX コントロール
次の表に示す ActiveX コントロールを作成するには、対応する OLE プログラム ID を使用します。

作成するコントロール|使用する ID
CheckBox            |Forms.CheckBox.1
ComboBox            |Forms.ComboBox.1
CommandButton       |Forms.CommandButton.1
Frame               |Forms.Frame.1
Image               |Forms.Image.1
Label               |Forms.Label.1
ListBox             |Forms.ListBox.1
MultiPage           |Forms.MultiPage.1
OptionButton        |Forms.OptionButton.1
ScrollBar           |Forms.ScrollBar.1
SpinButton          |Forms.SpinButton.1
TabStrip            |Forms.TabStrip.1
TextBox             |Forms.TextBox.1
ToggleButton        |Forms.ToggleButton.1

●多分
CommandButtonのCaptionのフォントはプロパティウィンドウから変更できるが、<del>なぜかフォントサイズが変更できない。なのでVBAで設定する。一度だけ実行すれば消して良い。</del>
Private Sub ボタン名_Click()
   Let Me.OLEObjects("ボタン名").Object.FontSize = 任意のサイズ(数値)
End Sub

.FontItalic=Trueでイタリック
.FontBold=Trueで太字
などなど。

追記。
→プロパティウィンドウからできた。フォント名を変更しようとボタンを押すと例のフォント設定用のウィンドウが出てくる。そこでサイズだけじゃなく、boldもitalicも設定可。

●例
For Each Shape In WorkSheet.GroupObjects.Item("グループ名").ShapeRange.GroupItems
   If Shape.OLEFormat.Object.Object.Value = True Then ~
Next Shape
グループ化したラジオボタンがどれか選択されているかどうか。
なんでこんな風になったかわからないが、かきかえれそう。時間あるとき検証。

書き換えた。
For Each Shape In WorkSheet.Shapes("グループ名").GroupItems
   If Shape.DrawingObject.Object.Value = True Then ~
Next Shape

做。

2008/1/27 14:13
EXCEL。入力規則について。
入力規則のリストに、全角数字をいれておいた。選択して、確定。
そこまでは良い。
確定後、編集モードにして、フォーカスを解除しようとすると、例の警告がでる。
不正な値と。
また、リスト内にあるはずの全角数字を、選択せずに入力しようとすると、例の警告がでる。

セルの表示形式を、文字列にして解決。標準のままだと、全角数字を打ち込んだ瞬間、半角の数値としてみなされるようだ。

転。

2007/11/18 11:46
EXCEL。ここ数日、VBAだけでクリップボードを経由せずに、書式や条件付書式をコピーできないかとうんうん悩んでいた。
Range.Copy Destination:=貼り付け先
とすれば、クリップボードを使わないが、全てがコピーされる。なんとか書式だけはできないのか。
今のところできないらしい。さっきようやくわかった。

なら全てコピーされるままさせて、値だけ次のステップで消せばいいと気付く。

ややすっきりしない。速さはどうなんだろうか。気になるほどになったら測ろう。
とりあえずみっともないから、ScreenUpdatingは一時的にFalseにしとかないと。

解。

2007/11/9 14:59
ここ数年悩まされていたEXCELの問題解決。時間はかかりましたが、真正面から向き合って解決。よかったです。
常識なのかもしれませんが一応。

▼ブックオープン時に再計算の行われる関数
AREAS関数
CELL関数
COLUMNS関数
INDEX関数
INDIRECT関数
NOW関数
OFFSET関数
ROWS関数
RAND関数
RANDBETWEEN関数
TODAY関数

こいつらがセル(ワークシート)に含まれていると、他のブックのセルをちょっと変えただけでも一々再計算してくれます。結果、そういうシートが同時に数多く存在していると、全然関係ないブックのマクロでもすごく遅くなる。ただし、入力規則の参照範囲に含まれているのは影響しない。

今晩は祝杯だー。ああ、夜行バスで出かけるんでした。でも休み前にすっきり。
前 | 1 | 次

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close