AIと戦って、あなたの人生のリスク診断 >>

VC6 EXCELオートメーションにてEXCELシートを操作しています。
シートが複数あるブックに対して、印刷プレビューを行うと、アクティブとなっているシートのみしかプレビューできません。
ブック全体のプレビューを行いたいのですが方法がわかりません
----- ソースコード -----
_WorkbookPtr pBook = m_pBooks->Open((_bstr_t)OutFile);
m_pExcel->PutVisible( 0, TRUE );
pBook->PrintPreview();


一応、PrintOutメソッドも使用してみたのですが、引数がわかりませんでした。


開発環境
 VC6
 EXCEL2000


恐れ入りますが、ご教授のほどお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

Cは門外漢なので、マクロの記述で失礼します。



Dim i as Integer
For i = 1 to ThisWorkBook.Sheets.Count
ThisWorkBook.Sheets(i).Select False
Next

で、全シートが選択できます。
    • good
    • 0
この回答へのお礼

シートの選択は参考にさせていただきました。

以下のコードにて解決しました。

pBook->Worksheets->Select();  ←この1行を追加
pBook->PrintPreview();

お返事いただいた方どうもありがとうございました。

お礼日時:2005/11/24 19:16

ファイル名を指定してみてください。



細かいことは、Yahooの日本のサイトで DirectX VC の順で検索すると同ネタを扱っているサイトがみつかりますよ。
    • good
    • 0
この回答へのお礼

回答どうもありがとうございます。
検索の仕方がよくわからず、目的のとこにたどり着けませんでした。
検索結果のリンク張っていただくと助かります。

お礼日時:2005/11/24 19:19

No.1のe10goです。



すみません。マクロでなく、VCでしたね。
VCは、私の専門外ですが、下のマクロ(VBA)からVCへのコード変換はできませんか。

無責任な言い方で、すみませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
申し訳ございません、No1の方法は試しました。
EXCELシートをテンプレートにしたいため、マクロは使用できないのです。
マクロのコードをVCに変換できれば良いのですが
Sheetをグループ化する部分が今ひとつコードに落とせないのです。
これのコードが変換できればよいのですが

お礼日時:2005/11/24 17:16

マクロを使わなくてもできますよ。


「Ctrl」キーを押しながらアクティブシート以外のシートタブをクリックすれば、そのシートも選択状態になります。
その方法でブック内のシートを全て選択して、そのまま、印刷プレビューを見れば良いです。

なお、簡単にブック内のシートを全て選択するには、一番左(または右)のシートをアクティブにして、「Shift」キーを押しながら一番右(または左)のシートシートタブをクリックすれば良いです。

なお、これらの作業を「新しいマクロの記録」の後に行えば、マクロができます。
以下がその例です。(Sheet3がアクティブ状態から、全てのシートを選択した)

Sub Macro1()
' Macro1 Macro
' マクロ記録日 : 2005/11/24 ユーザー名 :
Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")).Select
Sheets("Sheet3").Activate
ActiveWindow.SelectedSheets.PrintPreview
End Sub
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QDataGridViewでコードで値を入力したい

VB2005のDataGridViewですが、行と列を指定して
そのセルに値を入力したいと思いますが、どのプロ
パティに行番号・列番号を入れればいいのでしょうか?

Aベストアンサー

VB2005のDataGridView.rows(1).cells(2).value=3

QC#でのExcel操作について.(Rangeオブジェクトへの複数範囲設定)

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Range("B1","B3");
/*↑の部分で("B1:B3,B5:B8,C5")のようなことをしたいです.RangeにAddメソッドのようなものがあればと思っているのですが無いみたいなので‥‥*/
chart.SetSourceData(chartRange,Excel.XlRowCol.xlColumns);
Excel.SeriesCollection seriesCollection=(Excel.SeriesCollection)chart.SeriesCollection(Type.Missing);

よろしくお願いします.

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Rang...続きを読む

Aベストアンサー

Excel.Range chartRange = oSheet.get_Range("B1:B3,B5:B8,C5", Missing.Value);
でよいのではないでしょうか?
(Missingは using System.Reflection)
(私はC#の知識は全くありませんがVC# 2005 Express Editionで確認しました)

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;302096

QVBAでの結合セルのコピー&ペースト

こんにちは。
EXCELのVBAでマクロを作成しています。
セルの値のコピー&ペーストを行おうとしているのですが、結合されているセルのペーストのときに、「同じ結合セルが必要です」とエラーになってしまいます。
例えば、A1とA2が結合されたセル+A3をコピー
Worksheets(x).Activate

Range("A1:A3").Selection
Range("A1:A3").Copy

別のシートで、B1とB2が結合されたセル+B3にペースト
Worksheets(y).Activate
Range("B1:B3").Paste


セルの結合を解除すればうまくいきます・・・
セルを結合したままペーストしたいのですが、どうやら間違っているようです(ノ_・。)
どなたか教えてください。
よろしくお願いします。

Aベストアンサー

nao_linさんこんにちは。merlionXXです。

> 値だけ貼付けのオプションをつけるとエラーになってしまうのは何故なのでしょうか?

結合セルの値貼り付けは無理のようですね。↓
http://support.microsoft.com/default.aspx?LN=JA&scid=kb;ja;JP416846

QDataGridViewでセルクリックイベントを発生させるには

DataGridViewでセルクリックイベントを発生させるには、
デザイナからではCellClickイベントハンドラとなりますが、
プログラムコード上から発生させるにはどのようにすればよろしいでしょうか?

CurrentCellでアクティブセルを変更した時に、そこのセルをクリックさせるイベントが欲しいのですが・・

宜しくお願い致します。

Aベストアンサー

CellClickイベントハンドラの内容を別のメソッドとして作り、アクティブセルを変更した際にそのメソッドを呼び出す方法ではダメなのでしょうか?
どうしてもCellClickイベントを発生させて処理をしたいのでしょうか?

QC# Excelファイルを生成したい

只今Excelファイルの出力について悩んでいます。

DataGridViewやListViewのデータをExcelに吐き出そうと思っています。
が、ネットで色々と調べてもよくわかりません・・・

サンプルソースは出てくるのですが、何が必要でどのようなことができるのかが
いまいちピンと来なく、なかなか実現に至っていません。

やりたいことは
 ・新規作成するExcelファイルの名前を任意で入力
 ・保存先を指定
 ・DataGridViewなどの入力データをExcelにそのまま吐き出す
です。

分からないのは
 ・Excelファイルを生成して保存してからデータを入れるのか(処理の順番)
 ・データ挿入はどうやるのか
 ・そもそもExcelファイルの生成と保存の仕方

プログラミング初心者なので、いまいち把握しきれません
できれば97-2003ブックに対応したものをと思っています。
手順など分かる方、よろしくお願いします。

念のため開発環境とExcelのバージョンを・・
VisualStudio2008 C#
OS:XP
Excel:2007

只今Excelファイルの出力について悩んでいます。

DataGridViewやListViewのデータをExcelに吐き出そうと思っています。
が、ネットで色々と調べてもよくわかりません・・・

サンプルソースは出てくるのですが、何が必要でどのようなことができるのかが
いまいちピンと来なく、なかなか実現に至っていません。

やりたいことは
 ・新規作成するExcelファイルの名前を任意で入力
 ・保存先を指定
 ・DataGridViewなどの入力データをExcelにそのまま吐き出す
です。

分からないのは
 ・Excelフ...続きを読む

Aベストアンサー

> ・そもそもExcelファイルの生成と保存の仕方
についてですが。

C#にてエクセルの名前をつけて保存の方法
http://okwave.jp/qa4881377.html
回答No3で、新規Book作成~名前を付けて保存をしてます。

Excel2007は不所持なので、もし違ったらごめんなさい。

QDataGridViewのチェックボックスのON、OFFの判定方法

お世話になります。ご協力お願いします。
環境:VS2008 .Net FrameWork3.5
言語:C#

質問内容:ボタンを押下したら、DataGridViewの列に設定したチェックボックスのON,OFFを判定して処理を行いたい。
現状以下の方法で実現は出来ていますが、とても回りくどい方法になっています。
正しい処理を教えて頂けないでしょうか。

1.DataGridViewにて、列にチェックボックスを設けている。
2.truevaluesプロパティにtrueをセットしている。

ボタンを押下したらチェックボックスのON、OFFを判定する為に、DataGridViewの行を
ループさせて判定させています。

for(int i=0;i < DataGridView.Count;i++){
___if((string)DataGridView.Rows[i].Columns[0].values == "true")
___{
______処理
___}
}

お願い致します。

Aベストアンサー

 こんばんは。

 正しいかどうかは断言出来ませんが、要はチェックボックスの「on, off」を確認しながらループするのが非効率的なので、ループ回数を「on」の個数だけに留めたいと言う事でしょうか。

 でしたら、以下URLに記載されているイベントハンドラを応用して、
 http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html

 セルのチェックボックスが「on, off」された瞬間に、セルのROW番号をハッシュテーブルに向かって「登録、解除」をしていけば、結果として「on」になっているセルのROW番号だけを保持する事になります。

 「Dictionaryジェネリッククラス」
 http://msdn.microsoft.com/ja-jp/library/xfhwa508(VS.80).aspx

 以下参考程度に。

//ハッシュテーブル(trueのROW番号だけを記録するDictionary<Key, Value>だが、今回の事例では両方とも同じROW番号を入れる)
private Dictionary<int, int> boolMapper;

private void Form1_Load(object sender, EventArgs e)
{
//作成
this.boolMapper = new Dictionary<int, int>();
}

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentCellAddress.X == 0 && this.dataGridView1.IsCurrentCellDirty)
{
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}

//チェックボタンが「on, off」された瞬間に呼ばれるイベントハンドラ
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && this.dataGridView1.Columns[e.ColumnIndex].ValueType == typeof(bool))
{
//チェックボタンが「on」になったのでハッシュテーブルに登録
if ((bool)this.dataGridView1[e.ColumnIndex, e.RowIndex].Value == true)
{
this.boolMapper.Add(e.RowIndex, e.RowIndex);
}
//チェックボタンが「off」になったのでハッシュテーブルから除外
else
{
this.boolMapper.Remove(e.RowIndex);
}
}
}

//ボタン1を押した時に呼ばれるイベントハンドラ
private void button1_Click(object sender, EventArgs e)
{
//ハッシュテーブルの要素個数分だけ回転する
foreach(KeyValuePair<int, int> kvp in this.boolMapper)
{
//ココで何かする「kvp.Value / kvp.Key」どちらにも同じ数字が入っているのでどちらを使用するかは問わない
this.dataGridView1[0, kvp.Value];
}
}

 こんばんは。

 正しいかどうかは断言出来ませんが、要はチェックボックスの「on, off」を確認しながらループするのが非効率的なので、ループ回数を「on」の個数だけに留めたいと言う事でしょうか。

 でしたら、以下URLに記載されているイベントハンドラを応用して、
 http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html

 セルのチェックボックスが「on, off」された瞬間に、セルのROW番号をハッシュテーブルに向かって「登録、解除」をしていけば、結果として「on」になっ...続きを読む

QPDF起動時のナビゲーションパネルボタンの非表示

PDF起動時のナビゲーションパネルボタンの非表示を、VB.NETのWebBrowzerを使用して、非表示にしたいと考えています。
#Toolbar=0 とかで非表示ができるので、それと同じ方法でできないでしょうか?ご存知の方がいらっしゃいましたらご教授下さい。

Aベストアンサー

PDFに埋め込んだJavaScriptから非表示が可能なようです。
http://forums.adobe.com/thread/406327

しかし、バージョンが古かったり環境設定でJavaScriptが無効化されていると効果がありません。

JavaScriptで制御できるので、ブラウザからCOMコントロールを取得して操作することも可能かもしれませんが・・・。

ツールバーを非表示にしたい理由を提示すれば、代替手段を提示してもらえるかもしれませんね。

OCXで提供されているAcrobat PDF Readerコントロールを使う、とか。
ためしにVB2005でやってみましたが、PDFの表示とツールバーの非表示は簡単にできました。

AxAcroPDF1.src = "D:\hoge.pdf"
Call AxAcroPDF1.setShowToolbar(False) ' ツールバーを非表示

ただ、OCXを直接プログラムで扱うことは非推奨になっていたような記憶が・・・(あやふやですが

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む


人気Q&Aランキング