過去ログ

                                Page     353
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼何がおかしいのでしょう・・・  ISHIKAWA 02/10/30(水) 17:25
   ┗とりあえず  りん 02/10/31(木) 0:51
      ┗Re:とりあえず  KU 02/10/31(木) 16:28
         ┗Activeを多用すると混乱するよ  りん 02/11/1(金) 10:38
            ┗Re:Activeを多用すると混乱するよ  KU 02/11/18(月) 14:59

 ───────────────────────────────────────
 ■題名 : 何がおかしいのでしょう・・・
 ■名前 : ISHIKAWA
 ■日付 : 02/10/30(水) 17:25
 -------------------------------------------------------------------------
   いつも教えていただいています。ありがとうございます。
ちょっと長くなりますが・・・。

FD(Aドライブ)にあるA.TXTとB.TXTをエクセルに読み込み、
指定したエクセルファイルに書き込み、セーブして終了(エクセルファイルを閉じる)。
という処理を行うために、下記のようなVBAを組みました。
(長くてすみません・・・。)
しかし、ファイルには書き込みに行っているみたいなのですが、
セーブして、終了というメッセージ(COMPLETE!)が出てこないし、
エクセルも閉じないのです。

手動でエクセルファイルを閉じることは出来ます。(保存しますか?
というコメントは出てくる)
デバック等やってみても引っかかってこないので・・・
途中でハングしてるのかな?とも思うのですが、うーーーん・・・
わからない・・・。
すみませんがどなたか教えてください!


Option Explicit
  Dim MSG   As String
  Dim RET   As Integer
  Dim FNAME  As String
  Dim SaveBook As Object 'ACTIVE BOOK NAME SAVE AREA
  
Sub Auto_Open()
  Set SaveBook = Application.ActiveWorkbook
  MSG = "A DRIVES IS TEXT FLOPY DISK SETTING OK ?" _
    & Chr(13) & Chr(13) & Chr(9) & "Ver 1.0" & Chr(9) _
    & "Created by 1997/06/18"
  RET = MsgBox(MSG, vbYesNo, "OPENS TEXT FILE")
  If RET = vbNo Then
    Beep
    Exit Sub
  End If
  RateTextRead
  RateHyoCopy
  UsdTextRead
  UsdHyoCopy
  Create_Newbook
End Sub

'*********************************************************
'  A TEXT FILE READ PROCESS             *
'*********************************************************
Sub RateTextRead()
'  OPEN TEXT FILE NAME SET
'  FName = Application.GetOpenFilename("A TEXT FILE(*.txt),*.txt" _
'      , 1, "EXCHANGE A TEXT FILE OPEN")
'
  FNAME = "A:\A.TXT"
  If FNAME <> "False" Then
    MSG = "Opening ... Text File (A.TXT) !!!"
    DispStatMsg 1, MSG 'STATUS BAR MESSAGE DISPLAY
    Application.ScreenUpdating = False 'SCRREN LOCK
'
'*** TEXT IMPORT WIZARD ***
'***  DATA TYPE :DELIMITED
'***  DELIMITERS:TAB,COMMA
    Workbooks.OpenText FileName:=FNAME, _
      StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
      xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
      Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
      FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 2), _
        Array(4, 1), Array(5, 2), Array(6, 1), Array(7, 1), _
        Array(8, 1), Array(9, 1), Array(10, 1))
    DispStatMsg 0 'STATUS BAR MESSAGE CLEAR
  End If
End Sub

'*********************************************************
'  B TEXT FILE READ PROCESS              *
'*********************************************************
Sub BTextRead()
'  OPEN TEXT FILE NAME SET
'  FNAME = Application.GetOpenFilename("B TEXT FILE(*.txt),*.txt" _
'      , 1, "B TEXT FILE OPEN")
'
  FNAME = "A:\B.TXT"
  If FNAME <> "False" Then
    MSG = "Opening ... Text File (B.TXT) !!!"
    DispStatMsg 1, MSG 'STATUS BAR MESSAGE DISPLAY
    Application.ScreenUpdating = False 'SCRREN LOCK
'
'*** TEXT IMPORT WIZARD ***
    Workbooks.OpenText FileName:=FNAME, _
      StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
      xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
      Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
      FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _
        Array(4, 1), Array(5, 1), Array(6, 1))
    DispStatMsg 0 'STATUS BAR MESSAGE CLEAR
  End If
End Sub

Sub RateHyoCopy()
  Dim i, J   As Integer
  Dim RC1, RC2 As Integer 'GYO COUNT
  Dim CC1, CC2 As Integer 'RETU COUNT
  MSG = "Copies Text File of RATE to Excel Sheets (A) !!! "
  DispStatMsg 1, MSG 'STATUS BAR MESSAGE DISPLAY
'
  Windows(SaveBook.Name).Activate 'A.XLS
  Worksheets("A").Select
  With Worksheets("A").Cells(1, 1).CurrentRegion '
    RC1 = .Rows.Count   'GET SELLS GYO
    CC1 = .Columns.Count 'GET SELLS RETU
  End With
  Range(Cells(2, 1), Cells(RC1, CC1)).ClearContents 'OLD DATA(A2:??) CLEAR
'
'  TEXT DATA ---> A EXCEL SHEETS
  Windows("A.TXT").Activate
  With Worksheets(1).Cells(2, 1).CurrentRegion 'DATA SELLS
    RC2 = .Rows.Count - 1  'GET SELLS GYO
    CC2 = .Columns.Count 'GET SELLS RETU
  End With
'*  Range("A1:J119").Select
  Range(Cells(1, 1), Cells(RC2, CC2)).Select 'COPY MOTO NO TEXT DATA SELECT
  Selection.Copy 'PASTE
'
  Windows(SaveBook.Name).Activate 'A.XLS
  Worksheets("A").Select
  Range("A1").Select 'HARITUKESAKI SELLS SELECT
'** PASTE SPECIAL (KEISIKI HARITUKE) **
'** PASTE : VALUES
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
'  OPEN TEXT FILE CLOSE
  Windows("A.TXT").Activate
  Application.DisplayAlerts = False 'NOT CONFIRM
  ActiveWorkbook.Close 'BOOK CLOSE
'
  Cells(1, 1).Select 'CORSORE SELLS A1
  Application.ScreenUpdating = True 'SCRREN LOCK FREE
  DispStatMsg 0 'STATUS BAR MESSAGE CLEAR
'  MsgBox "A SHEETS IS COMPLETED !!!"
End Sub

Sub UsdHyoCopy()
  Dim i, J   As Integer
  Dim RC1, RC2 As Integer
  Dim CC1, CC2 As Integer
  MSG = "Copies Text File of USD to Excel Sheets (B) !!!"
  DispStatMsg 1, MSG 'STATUS BAR MESSAGE DISPLAY
'
  Windows("B.TXT").Activate
  With Worksheets(1).Cells(2, 2).CurrentRegion
    RC2 = .Rows.Count   '
    CC2 = .Columns.Count '
  End With
'*  Range("B2:G9").Select
  Range(Cells(1, 1), Cells(RC2, CC2)).Select 'COPY MOTO
  Selection.Copy 'COPY
'
  Windows(SaveBook.Name).Activate 'SAMPLE.XLS
  Worksheets("B").Select
  Range("B9").Select 'OUTPUT SELLS SELECT
'** PASTE SPECIAL (KEISIKI HARITUKE) **
'** PASTE : VALUES
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
'  OPEN TEXT FILE CLOSE
  Windows("B.TXT").Activate
  Application.DisplayAlerts = False 'NOT CONFIRM
  ActiveWorkbook.Close 'BOOK CLOSE
'
'  MOVE OF EFF-DATE & NO B9--> E6, C9-->E7
  With Worksheets("B")
    .Range("E6").Value = .Range("B9").Value 'SET EFF.DATE
    .Range("E7").Value = .Range("C9").Value 'SET NUMBER
    .Range("E6").NumberFormat = "yyyy/mm/dd"
    .Range("B9:C9").ClearContents
  End With
  Range("E6:F7").Select
  With Selection
    .HorizontalAlignment = xlCenterAcrossSelection
    .VerticalAlignment = xlBottom
    .WrapText = False
    .Orientation = xlHorizontal
    .AddIndent = False
  End With
'
  Cells(1, 1).Select 'CURSOLE SELLS A1
  Application.ScreenUpdating = True 'SCREEN LOCK FREE
  DispStatMsg 0 'STATUS BAR MESSAGE CLEAR
'  MsgBox "B SHEETS IS COMPLETED !!!"
End Sub

Sub Create_Newbook()
  Dim SourceFileName As String
  Dim DestFileName  As String
  Dim SavePath    As String
  Dim SaveName    As String
  Dim WorkName    As String
  Dim SaveSheetIn  As Integer
  Dim BookName    As Object
'
  SavePath = ActiveWorkbook.Path
  Set BookName = Application.ActiveWorkbook
  '*------------------------*
  '* *
  '*------------------------*
  DestFileName = Application.GetSaveAsFilename("*.XLS", _
    "RATE FILE(*.xls),*.xls", 1, "NEW EXCEL BOOK NAME")
  If DestFileName = "False" Then     '<CANCEL>
    GoTo CopyCancel           'COPY STOP
  End If
'
  If Dir(DestFileName) = "" Then
    SaveSheetIn = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Workbooks.Add              'ADDED NEW BOOK
    Application.SheetsInNewWorkbook = SaveSheetIn
    ActiveWorkbook.SaveAs FileName:=DestFileName  'BOOK KARI SAVE
'    ActiveWindow.Caption = Right(DestFileName, 10)
    DestFileName = ActiveWindow.Caption   '
  Else
    Workbooks.Open FileName:=DestFileName  '
  End If
  SaveName = ActiveWindow.Caption     'PASTE OUT BOOK NAME
'
'  BOOK INFORMATION SET
  With ActiveWorkbook
    .Title = "AB"
    .Subject = ""
    .Author = "ISHIKAWA"
    .Keywords = ""
    .Comments = ""
  End With
'
  '*------------------------------*
  '* PASTE            *
  '*------------------------------*
  MSG = "Saving ..." & SaveName
  DispStatMsg 1, MSG
  Application.ScreenUpdating = False 'SCREEN LOCK SET
  Windows(BookName.Name).Activate   'BOOKNAME:ESAMPLE.XLS
'
  Application.Worksheets("B").Copy _
    before:=Workbooks(SaveName).Worksheets(1)
'  Columns("B:G").Select
'  Selection.ColumnWidth = 10
  Range("A1").Select
'
  Windows(BookName.Name).Activate
  Application.Worksheets("A").Copy _
    before:=Workbooks(SaveName).Worksheets(2)
  Application.DisplayAlerts = False
  Sheets(3).Delete
  Application.DisplayAlerts = True
  Windows(BookName.Name).Activate
  ActiveWorkbook.Close False
'  ActiveWorkbook.Save
'  ActiveWorkbook.Close
  DispStatMsg 0
  Application.ScreenUpdating = True
  MsgBox "EXCEL SHEETS OF B AND A IS COMPLETED !!!"
  Exit Sub
  '
  '*--------------*
  '* COPY STOP  *
  '*--------------*
CopyCancel:
  Beep
  MsgBox "NEW EXCEL BOOK SAVING CANCEL !!!", vbCritical, "SAVE"
  ActiveWorkbook.Close False
  Exit Sub
End Sub

'*Sub ModuleErase()
'*  Sheets("Module1").Visible = False
'*End Sub

Sub DispStatMsg(DisplaySwitch As Integer, Optional MSG)
  Static STAT As Boolean
  With Application
    Select Case DisplaySwitch
      Case 1
        STAT = .DisplayStatusBar  '
        .DisplayStatusBar = True  '
        .StatusBar = MSG      '
      Case 0
        .StatusBar = False     '
        .DisplayStatusBar = STAT  '
    End Select
  End With
End Sub
 ───────────────────────────────────────  ■題名 : とりあえず  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/10/31(木) 0:51  -------------------------------------------------------------------------
   ISHIKAWA さん、こんばんわ。


>FD(Aドライブ)にあるA.TXTとB.TXTをエクセルに読み込み、
>指定したエクセルファイルに書き込み、セーブして終了(エクセルファイルを閉じる)。
>という処理を行うために、下記のようなVBAを組みました。


とりあえず、

    ↓ はどこにあるのでしょうか?
>  UsdTextRead
 ───────────────────────────────────────  ■題名 : Re:とりあえず  ■名前 : KU  ■日付 : 02/10/31(木) 16:28  -------------------------------------------------------------------------
   りん さん、すみません。
実は
RATE→A
USD→B
なのです。
読んだ時にわかりやすくしようとして、修正が出来てないところが
たくさんありかえってわかりにくくなってしまいました・・・。
ごめんなさい。

>ISHIKAWA さん、こんばんわ。
>
>
>>FD(Aドライブ)にあるA.TXTとB.TXTをエクセルに読み込み、
>>指定したエクセルファイルに書き込み、セーブして終了(エクセルファイルを閉じる)。
>>という処理を行うために、下記のようなVBAを組みました。
>
>
>とりあえず、
>
>    ↓ はどこにあるのでしょうか?
>>  UsdTextRead
 ───────────────────────────────────────  ■題名 : Activeを多用すると混乱するよ  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/11/1(金) 10:38  -------------------------------------------------------------------------
   KUさん(ISHIKAWAさん?)、おはようございます。

コードを追いかけた結果。

>Sub Create_Newbook()
>  <<略>>
  '↓代入が間違えてるのか、正しいのかは知りませんが。
    BookNameがThisWorkbook(マクロのブック)になっているので
>  Windows(BookName.Name).Activate
   '↓この時点でマクロ終了
>  ActiveWorkbook.Close False

   '↓以下は実行されません。
>'  ActiveWorkbook.Save
>'  ActiveWorkbook.Close
>  DispStatMsg 0
>  Application.ScreenUpdating = True
>  MsgBox "EXCEL SHEETS OF B AND A IS COMPLETED !!!"
>  Exit Sub
>  '

あと、

Dim BookName As Workbook

と宣言しておけば、
  Windows(BookName.Name).Activate
  ActiveWorkbook.Close False

     ↓

  BookName.Close False

の1行ですみますよ。

ActiveWorkbookやActiveSheetを使うと、実行してみたら対象が違っていたということが多々あるので、特に複数のブックを扱うときは気をつけないといけません。
 ───────────────────────────────────────  ■題名 : Re:Activeを多用すると混乱するよ  ■名前 : KU  ■日付 : 02/11/18(月) 14:59  -------------------------------------------------------------------------
   りんさん

おそくなってすみません。

無事出来ました!
ありがとうございました!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 353