「夫を成功」へ導く妻の秘訣 座談会

いつもお世話になってます。

VBで一覧を表示するプログラムを組んでいます。
その一覧をエクセルに出力するボタンも作成しています。
エクセル出力ボタンを押下した際、
「実行時エラー:ファイルがオープンできません」となります。
何が原因として考えられますか?

※因みに、この現象が起こるPCと起こらないPCがあります。

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

A 回答 (3件)

#2です。



>ただ、中国語版PCでよくエラーが出るような気がします。
言語の問題?

例えばフォルダ名を取得すると文字化けするとか?
別の文字に入れ替わってしまうとか?
そのPCでデバッグ確認していかないと、見えてこないかも。
    • good
    • 0

>この現象が起こるPCと起こらないPCがあります。


その環境の違いをよく調べて下さい。
OS・Excel・VBのバージョンとか。

あとはExcelが起動できているがファイルを開けない(新規作成できない)のか、
Excelその物が起動できないのかにもよるでしょうか。

と思いますが、的はずれでしたらスル~して下さい。

この回答への補足

OS・Excel・VBのバージョンは同じですが、
ただ、中国語版PCでよくエラーが出るような気がします。

補足日時:2009/02/13 14:32
    • good
    • 0

>一覧を表示


一覧とはなに?
>ファイルがオープンできません
ファイル形式とかはなに?テキストファイルですか?
そのファイルはそのPCに存在する?。
どんなプログラムを組んだのでしょう。そのプログラムの要点は?
質問して回答を求めるにしては、あまりにも説明不十分では。
あなたのPCを使っていない読者には何も情報を探せないのです。

この回答への補足

説明不足で申し訳ありません。

>一覧とはなに?

SPREADで一覧を表示しているのですが、
そのSPREADの内容をエクセルに出力しています。

>ファイル形式とかはなに?テキストファイルですか?

正常な場合は、ボタンを押下ごエクセルが開くのですが、
エラーの場合は、
「実行時エラー -1610612753(a0000001) ファイルがオープンできません。」
…としか出ないので。。。

補足日時:2009/02/13 14:27
    • good
    • 0

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

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

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

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

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

Qフレーム内に移動したい

かなり初歩的なことと思うのですが、方法が分かりません。
フレームの外に配置したコントロールをフレーム内に移動するには、
どうすればよいのでしょうか。
ドラッグすれば座標の上では見かけ上フレーム内に入りますが、
フレームの上に乗った状態になりません。
方法をご存じの方は教えて下さい。

Aベストアンサー

コントロールを選択し
メニューの

編集

切り取り

次に、フレームを選択し
メニューの

編集

貼り付け

で どうでしょう?

Q日付の範囲検索がしたい

お世話になります。

テーブル名:info
フィールド名:no,date,name
フィールドのデータタイプ:int型,char型,char型

のデータベースがあります。dateにはyyyy/mm/ddの形でデータが入っているのですが、
そのdateから、例えば2004/01/01~2005/01/01までに該当するデータを検索して、抽出したいのですが、方法がわかりません。

SELECT REPLACE(date, '/', '') FROM info

で、“/”がないデータを取り出すことはできるのですが、その後どうしたら良いかがわかりません。
どなたかいい方法教えていただけないでしょうか?

Aベストアンサー

SELECT * FROM info WHERE date BETWEEN '2004/01/01' AND '2005/01/01'

で取れませんか?

Q実数の整数部,小数部の取得

OS:windows2000pro
VB:VB6.0sp5

実数 num(変数) [as currency]
 (但し 小数点以下2位まで)の値の
1.整数部 num_int(変数) [as long]
2.小数部 num_dec(変数) [as long]
を上記変数に格納するのは、どのようにすればいいのでしょうか?

(例1)num = 123.02 の場合、num_int=123, num_dec=2
(例2)num = 4.20 の場合、num_int= 4, num_dec=20
(例3)num = 0.23 の場合、num_int= 0, num_dec=23

 よろしくお願いいたします

Aベストアンサー

VB6ならこうです。
num_int = Fix(num)
num_dec = 100 * (num - num_int)

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')

と書くべきでしょうね。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Qエクセルでの再計算がされないんです

売上集計表としてエクセルを使用しています。ひとつのセルに売上数字を入れると前期との比率や累計などが計算されるようになっています。最近になって、この表に元になる数字を入れても再計算がされないことに気づきました。計算式の入ったセルをアクティブにしてその中に入力可能な状態にすると再計算されます。
今までのように数字を入れれば全て計算される状態にしたいのですがやり方がわかりません。詳しい方、教えてください。よろしくお願いします。

Aベストアンサー

「ツール」→「オプション」→「計算方法タブ」で「計算方法」が「自動」になっていますか? 

QVBAのコマンドボタンの文字列の改行方法は?

EXCEL2000のVBAでコマンドボタンを使っていますが、ボタンの横サイズは大きくできないときに、ボタンの文字列(caption)が長いので表示が途中で切れてしまう。WordWrapをtrueにすると改行するが、任意の文字位置で改行できない。スペース文字を途中で挿入して改行位置を調整しようとしてもうまくいかない。任意の位置で改行する方法はありますか。

Aベストアンサー

コマンドボタンのプロパティの『Caption』欄ではなく、コマンドボタン上での直接編集なら、
Shiftキー+Enterキーの同時押しで、任意の位置に改行を挿入できます。

具体的な手順を以下に説明します:
 1)『コントロール ツールボックス』ツールバーの左端にある『デザイン モード』ボタンを
  クリックして、デザインモードに切り替える
 2)改行を入れたいコマンドボタンを右クリック
 3)右クリックメニューから「コマンドボタン オブジェクト(O)→編集(E)」を選択
 4)コマンドボタン上にカーソルが表示されるので、改行させたい位置に移動
 5)Shiftキーを押しながらEnterキーを入力

・・・以上です。


人気Q&Aランキング