[リストへもどる]
一括表示

投稿時間:2003/02/04(Tue) 09:32
投稿者名:marl55
URL :
タイトル:
2度目の(Excel)シート追加ができない
以下のプログラムでCommand2で一度終了しても続けてcommand1で既存のファイルに新しいシートを作成しようとすると「実行時エラー1004 Worksheetメソッドは失敗しました。Globalオブジェクト」で"xlBook.Worksheets.Add.Move after:=Worksheets(Worksheets.Count)"の所でエラーします。(一度プログラムを終了すると問題ないのですが続けてやりたいので)解決方法を教えて下さい。(初めてで要領がわからなくてすみません)
Private Sub Command1_Click()
    'ファイルがあるかどうか調べる
    Dim MyFile As String
        MyFile = Dir("C:" & Text1.Text & ".xls")   'Text1にファイル名
        If Len(MyFile) > 1 Then
            Set xlApp = New Excel.Application
             Filename = "C:\" & Text1.Text & ".xls"
             Set xlBook = xlApp.Workbooks.Open(Filename)
             MsgBox "既存ファイルを開きます"
         Else
            Set xlApp = CreateObject("Excel.Application")
            Set xlBook = xlApp.Workbooks.Add
            Set xlSheet = xlBook.Worksheets(2)
            'xlBook.Name = Text1
            xlBook.Worksheets(2).Name = Text2.Text   'Text2にシート名
        MsgBox "新規にファイル&シートを作成します"
        End If
        
    'シートがあるかどうか調べる
    Dim Found As Integer
    Dim Sname As Worksheet
        Sheetname = Text2.Text
        Found = 0
        For Each Sname In xlBook.Worksheets      
           If Sname.Name = Text2.Text Then
                Found = 1
                MsgBox "既存シートを選択します"
                Set xlSheet = xlBook.Worksheets(Sheetname)
                Exit For
            End If
        Next
        
        If Found = 0 Then
            MsgBox "新規にシートを作成します"
            xlBook.Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
            Set xlSheet = xlBook.Worksheets(Worksheets.Count)
            xlSheet.Name = Text2.Text
        End If
        xlSheet.Select
        xlApp.Visible = True
End Sub

Private Sub Command2_Click()
    Filename = "C:\" & Text1.Text & ".xls"
    xlApp.DisplayAlerts = False
    xlSheet.SaveAs Filename  
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

投稿時間:2003/02/04(Tue) 10:46
投稿者名:A221
Eメール:
URL :
タイトル:
Re: 2度目の(Excel)シート追加ができない
では、1つずつ行きます。

> Private Sub Command1_Click()
>     'ファイルがあるかどうか調べる
>     Dim MyFile As String
>         MyFile = Dir("C:" & Text1.Text & ".xls")   'Text1にファイル名

          MyFile = Dir("C:\" 〜

>         If Len(MyFile) > 1 Then
>             Set xlApp = New Excel.Application
>              Filename = "C:\" & Text1.Text & ".xls"
>              Set xlBook = xlApp.Workbooks.Open(Filename)
>              MsgBox "既存ファイルを開きます"
>          Else
>             Set xlApp = CreateObject("Excel.Application")
>             Set xlBook = xlApp.Workbooks.Add
>             Set xlSheet = xlBook.Worksheets(2)

ここで新規の2枚目シートを割り当てるのは仕様ですか?

>             xlBook.Worksheets(2).Name = Text2.Text   'Text2にシート名
>         MsgBox "新規にファイル&シートを作成します"
>         End If
>        
>     'シートがあるかどうか調べる
>     Dim Found As Integer

Booleanで判別するほうが簡潔でよいのでは?

>     Dim Sname As Worksheet
>         Sheetname = Text2.Text
>         Found = 0
>         For Each Sname In xlBook.Worksheets      
>            If Sname.Name = Text2.Text Then
>                 Found = 1
>                 MsgBox "既存シートを選択します"
>                 Set xlSheet = xlBook.Worksheets(Sheetname)
>                 Exit For
>             End If
>         Next
>        
>         If Found = 0 Then
>             MsgBox "新規にシートを作成します"
>             xlBook.Worksheets.Add.Move after:=Worksheets(Worksheets.Count)

.Add と.Moveは同時に出来ないですね。
また、after:=Worksheets(Worksheets.Count)の部分は、
after:=xlbook.Worksheets(xlbook.Worksheets.Count)と指定せねばならないでしょう。

>             Set xlSheet = xlBook.Worksheets(Worksheets.Count)

Set xlSheet = xlBook.Worksheets(xlBook.Worksheets.Count)

>             xlSheet.Name = Text2.Text
>         End If
>         xlSheet.Select
>         xlApp.Visible = True
> End Sub

ちなみに、私が評価しながら作り変えてみたのは以下のようになりました。
Command2のほうは評価していません
'-------------------------------------------------------
Option Explicit
    
Private xlApp As New Excel.Application
Private xlBook As New Excel.Workbook
Private xlSheet As New Excel.Worksheet
Private Filename As String

Private Sub Command1_Click()
'ファイルがあるかどうか調べる
Dim FoundFlag As Boolean
Dim tmpSheet  As Excel.Worksheet
Dim MyFile   As String

Filename = "C:\" & Text1.Text & ".xls"
MyFile = Dir(Filename) 'Text1にファイル名

If Len(MyFile) > 1 Then
    MsgBox "既存ファイルを開きます"
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Open(Filename)
    'シートがあるかどうか調べる
    For Each tmpSheet In xlBook.Worksheets
        If tmpSheet.Name = Text2.Text Then
            FoundFlag = True
            Set xlSheet = tmpSheet
            Exit For
        End If
    Next
    If Not (FoundFlag) Then
        MsgBox "新規にシートを作成します"
        xlBook.Worksheets.Add
        xlBook.ActiveSheet.Move After:=xlBook.Worksheets(xlBook.Worksheets.Count)
        Set xlSheet = xlBook.Worksheets(Worksheets.Count)
        xlSheet.Name = Text2.Text
    Else
        MsgBox "既存シートを選択します"
    End If
Else
    MsgBox "新規にファイル&シートを作成します"
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    xlSheet.Name = Text2.Text
End If

xlSheet.Select
xlApp.Visible = True
End Sub

投稿時間:2003/02/04(Tue) 11:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: 2度目の(Excel)シート追加ができない
回答はA221さんの通りです。
理由は、ここのExcel&Word関係のVBからExcel及びWordを操作する時の注意事項を
見て下さい。

尚、 A221 さんの回答にひっかけがつくってあるようです(?)
上記を参考に探して下さい。

投稿時間:2003/02/04(Tue) 11:18
投稿者名:A221
Eメール:
URL :
タイトル:
Re^3: 2度目の(Excel)シート追加ができない
> 尚、 A221 さんの回答にひっかけがつくってあるようです(?)
> 上記を参考に探して下さい。

あちゃ〜。引っ掛けだなんて、花ちゃんさんもお人が悪い。(>_<)aポリポリ
#フォローありがとうございます。(^^

Set xlSheet = xlBook.Worksheets(xlBook.Worksheets.Count)

投稿時間:2003/02/04(Tue) 13:40
投稿者名:marl55
URL :
タイトル:
Re^4: 2度目の(Excel)シート追加ができない
ありがとうございました。解決いたしました。
A221さんのプログラムの方がずっと洗練されていますね。勉強になりました。
これからもがんばります。よろしくお願いします。
(>ここで新規の2枚目シートを割り当てるのは仕様ですか?→仕様です。)


それと、花ちゃん先生もありがとうございまいた。「注意事項」を見て!と言われないように気をつけ
たつもりなのですが、やっぱ駄目ですね、根本的に理解できていない。
もっと修行します。
ところで、私はWindowsNTを使っているのですが”Ctrl + Alt + End キーで Excel が残っていないか確認”できないのです。どうすれば確認できるか教えていただけると有り難いです。

投稿時間:2003/02/04(Tue) 14:44
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 2度目の(Excel)シート追加ができない

> ところで、私はWindowsNTを使っているのですが”Ctrl + Alt + End キーで Excel が残っていないか

Ctrl + Alt + Delete キーです。

因みに、私の場合は引っ掛け(別名愛の鞭)ではなく、毎度おなじみのうっかりミスです。

投稿時間:2003/02/04(Tue) 16:49
投稿者名:marl55
URL :
タイトル:
Re^6: 2度目の(Excel)シート追加ができない
>
> > ところで、私はWindowsNTを使っているのですが”Ctrl + Alt + End キーで Excel が残って
いないか
>
> Ctrl + Alt + Delete キーです。
花ちゃん先生、、、もちろん私はCtrl + Alt + Delete キーを使ってますよ。それができないのです。
ちなみに”Ctrl + Alt + End キーで Excel が残っていないか確認”はホームページのExcelの注意事項
のところからコピー&ペーストしたのでよもや間違っているとは思っていませんでした。
というわけで、どうすれば確認できるかご存知でしたら教えてください。

投稿時間:2003/02/04(Tue) 17:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: 2度目の(Excel)シート追加ができない
WinXP でもタスクマネージャは表示できるのでNTでもできるのではないかと
思っていましたが? NT は持っていないので解りませんが
タスクマネージャはないのでしょうか?
今、WEB で検索したら NT でも WinXP と同様のタスクマネージャが表示される
ようです。その中の[プロセス]タブをクリックして中にExcel が表示されて
いないか確認するのですが

投稿時間:2003/02/04(Tue) 17:47
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^6: 2度目の(Excel)シート追加ができない
>> ところで、私はWindowsNTを使っているのですが”Ctrl + Alt + End キーで Excel が残っていないか
> Ctrl + Alt + Delete キーです。

「Ctrl + Alt + Delete」は、Windows9X系の場合です。
NT/2000/XPの場合は、「Ctrl + Shift + Esc」を利用してください。

投稿時間:2003/02/04(Tue) 18:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: 2度目の(Excel)シート追加ができない
> NT/2000/XPの場合は、「Ctrl + Shift + Esc」を利用してください。

どちらでもOKじゃないのでしょうか?
NTはもっていないのでWEBで検索して調べたらCtrl + Alt + Delete でできるように
書いていましたが

WinXP の場合はどちらでも表示します。
タスクバーを右クリックしてもOKです。

投稿時間:2003/02/04(Tue) 18:45
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
雑記: キーボード ショートカット
> > NT/2000/XPの場合は、「Ctrl + Shift + Esc」を利用してください。
> どちらでもOKじゃないのでしょうか?

アプリケーション(あるいはプロセス)の一覧を表示させるために、
9X系では、「タスク(プログラム)の強制終了」ダイアログを利用し、
NT系では、「タスク マネージャ」を利用します。

そしてそれらを直接呼び出すためのショートカットは、
9XがCtrl+Alt+Del、NT系がCtrl+Shift+Escに割り当てられています。

# NT系でCtrl+Alt+Delを押した場合、タスクマネージャではなく、
# ログオンセキュリティダイアログが表示されるようになっています。


> NTはもっていないのでWEBで検索して調べたらCtrl + Alt + Delete でできるように

Ctrl+Alt+Delで表示されるダイアログには、タスクマネージャを
起動させるボタン[タスクマネージャ(T)]がありますので、
確かに、できなくはないのですが……その場合のキー操作は、
「Ctrl+Alt+Del、Alt+T」という事になってしまうのです。


> タスクバーを右クリックしてもOKです。
これはWin95/98では使えませんが、NT4、2000、XPであれば利用できますね。(^^)

投稿時間:2003/02/04(Tue) 19:40
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 雑記: キーボード ショートカット
細かく解説して頂きありがとうございました。

投稿時間:2003/02/05(Wed) 08:50
投稿者名:marl55
URL :
タイトル:
どちらでもOKでした!
魔界の仮面弁士さん、花ちゃん先生ありがとうございました。
試してみると、お2人おっしゃっていることは、どちらもOKでした。家ではWindows98なのでプロセスを
見る必要がなかったように思います。NTではそこを見ないといけないのですね。
これからはタスクバーで右クリックを利用させていただきます。
本当にありがとうございました。