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

投稿時間:2003/05/14(Wed) 15:56
投稿者名:aoiyuki
Eメール:
URL :
タイトル:
EXCELの行の削除方法(すでに他のEXCELが立ち上がっている場合)
はじめまして。aoiyukiと申します。
VBのヘルプやここの過去掲示板を見てもわからないことがありましたので、
ご存知の方がいらっしゃれば教えてください。

環境:Win98SE VB6.0(SP5) EXCEL2000(SP2)
処理概要:VBよりEXCELのテンプレートを開き、SQLSERVERより取得した
   データを表示し、空白行を削除する。

下記に実際のPRGの抜粋を掲載しますが、他のEXCELが立ち上がっていない
状態では、問題のDelete部分もきちんと動作します。
ただ、他のEXCELデータが立ち上がっていると、うまくDeleteができません。
ちなみに変数(LoActiveSheet)を使わずに、実際のパスで指定してもだめ
でした。
何か他のところに問題があるのでしょうか?
どうかよろしくお願いします。


    Dim LsXLSFile           As String           'ファイル名
    Dim LsSQL               As String
    Dim LrRec               As Recordset
    Dim LuExcel             As Excel.Application
    Dim LoActiveBook        As Workbook             '対象ブック
    Dim LoActiveSheet       As Worksheet            '対象シート
    Dim LlRow               As Long

    'エクセルアプリケーション起動
    On Error Resume Next
    Set LuExcel = GetObject(, "Excel.Application")
    If Err <> 0 Then
        Set LuExcel = CreateObject("Excel.Application")
    End If
    Err.Clear

    LsSQL = ""
    LsSQL = "EXEC P_DL85 "
      
    Set LrRec = PF_OpenResultset(LsSQL)
    If LrRec Is Nothing Then
        Exit Function
    End If

    'EXCELファイル名
    LsXLSFile = MCs_XLSPath & "\" & MCsXLSFile
    
    'データ出力
    With LuExcel
        'テンプレートオープン
        .Workbooks.Open App.Path & "\" & "DL85.xlt"
        Set LoActiveBook = .ActiveWorkbook

        '対象シートオープン
        LoActiveBook.Worksheets("MEISAI").Select
        Set LoActiveSheet = .ActiveSheet
                
        '★ここでSQLSERVERより取得したデータをEXCELに表示していますが長いので割愛★

        '出力行以下のレイアウト設定を削除
        LoActiveSheet.Range(Cells(LlRow, 1), Cells(1000, 30)).Delete    ←問題の部分
        
        'ファイル保存
        .Application.DisplayAlerts = False           '上書き確認ダイアログは表示しない
        LoActiveBook.Activate
        .ActiveWorkbook.SaveAs FileName:=LsXLSFile
        .Application.DisplayAlerts = True
        
        'エクセルアプリケーションクローズ
        On Error GoTo Err_Handle
        LoActiveBook.Close
        Set LoActiveSheet = Nothing
        Set LoActiveBook = Nothing
        Set LuExcel = Nothing
        
        '既にEXCELが起動していた場合はそのままとする
        If .Workbooks.Count > 0 Then
            .Visible = True
            .Application.WindowState = xlMinimized
        Else
            .Application.Quit
        End If
    End With

投稿時間:2003/05/14(Wed) 16:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: EXCELの行の削除方法(すでに他のEXCELが立ち上がっている場合)
下記のように変更してもだめでしょうか?

        Set LoActiveBook = .Workbooks.Open(App.Path & "\" & "DL85.xlt")

        '対象シートオープン
        Set LoActiveSheet = LoActiveBook.Worksheets("MEISAI")

投稿時間:2003/05/14(Wed) 16:35
投稿者名:aoiyuki
Eメール:
URL :
タイトル:
Re^2: EXCELの行の削除方法(すでに他のEXCELが立ち上がっている場合)
花ちゃん様
レスありがとうございます。
ご指摘の通りに変更してみましたが、やはりダメでした。


> 下記のように変更してもだめでしょうか?
>
>         Set LoActiveBook = .Workbooks.Open(App.Path & "\" & "DL85.xlt")
>
>         '対象シートオープン
>         Set LoActiveSheet = LoActiveBook.Worksheets("MEISAI")

投稿時間:2003/05/14(Wed) 17:29
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: EXCELの行の削除方法(すでに他のEXCELが立ち上がっている場合)
下記の部分も変更して下さい。省略系でかかれているので!

LoActiveSheet.Range(LoActiveSheet.Cells(LlRow, 1), LoActiveSheet.Cells(1000, 30)).Delete

投稿時間:2003/05/14(Wed) 17:55
投稿者名:aoiyuki
Eメール:
URL :
タイトル:
解決しました!!
下記の方法で解決しました!!
RANGEの中にも「LoActiveSheet」の指定がいることを
すっかり忘れていました。(よく見れば確かに省略形でした。)

花ちゃん様、ありがとうございましたm(_ _)m

> 下記の部分も変更して下さい。省略系でかかれているので!
>
> LoActiveSheet.Range(LoActiveSheet.Cells(LlRow, 1), LoActiveSheet.Cells(1000, 30)).Delete