2016-05-02 1 views
1

これは私の問題です。 VBAには、シートのすべての非表示列を削除するマクロがあります。正常に動作します。今VBA - ブックの保存後のブック2の操作

Sub Test() 
Dim F As Integer, C As Integer 
For F = 1 To Sheets.Count 
    ActiveSheet.Select 
    For C = 15 To 2 Step -1 
     ActiveSheet.Columns(C).Select 
     Selection.End(xlDown).Select 
     derniereligne = ActiveCell.Row 
     If ActiveSheet.Columns(C).Hidden = True Then 
      ActiveSheet.Columns(C).Delete 
     End If 
    Next C 
Next F 
End Sub 

しかし、私のプロジェクトは進化して、私はそれをやったので、私はコピーで私のブックを保存する必要があります。

Sub SaveXL() 

Dim Nom2 As String 
Dim Jour2 As String 
Dim FPath2 As String 
Jour2 = Format(Now(), "yyyymmdd - h\hmm'") 
Nom2 = Jour2 & " Pricelist" 
FPath2 = Sheets("PARAM").Range("B33").Value 
On Error GoTo fin4 
fichier = Application.GetSaveAsFilename(FPath2 & Nom2, "Fichiers Excel (*.xls), *.xls") 
ActiveWorkbook.SaveCopyAs fichier 
Exit Sub 
fin4:MsgBox "La création de l'excel a échoué" 
End Sub 

それはOK、私のコピーを作成します。しかし、2番目のマクロ(SaveXL)で保存すると、最初のワークブック(ワークブック2)のコピーで最初のマクロ(Test)を使用したいと思います。

可能ですか? ありがとうございます!

+0

SaveXL()を実行するたびにTest()マクロを実行しますか? – Vegard

答えて

1

私はあなたのテスト()のコードで行われた変更で ルックコピーしたワークブックの名前を渡します。

fichier = Application.GetSaveAsFilename(FPath2 & Nom2, "Fichiers Excel (*.xls), *.xls") 
ActiveWorkbook.SaveCopyAs fichier 
Test Nom2 

テストでは、対象のブックが開かれているかどうかを確認します。オープンそれが開いていない場合、マクロを実行するとTrueに等しい保存の変更とそれを閉じます。私はそれを正しく理解

Sub Test(targetWorkbookName As String) 
    Dim F As Integer, C As Integer, derniereligne 

    Dim targetWorkbook As Workbook 
    On Error Resume Next 
    Set targetWorkbook = Workbooks(targetWorkbookName) 
    On Error GoTo 0 
    If (targetWorkbook Is Nothing) Then _ 
     Set targetWorkbook = Workbooks.Open(targetWorkbookName) 

    For F = 1 To Sheets.Count 
     ActiveSheet.Select 
     For C = 15 To 2 Step -1 
      ActiveSheet.Columns(C).Select 
      Selection.End(xlDown).Select 
      derniereligne = ActiveCell.Row 
      If ActiveSheet.Columns(C).Hidden = True Then 
       ActiveSheet.Columns(C).Delete 
      End If 
     Next C 
    Next F 

    targetWorkbook.Close savechanges:=True 
End Sub 

希望。 HTH

+0

それは、ありがとう、働く。しかし、私がファイルの名前を変更したとき、それはもはや "Nom2"ではないので、ファイル上でマクロを実行しません...どうすれば問題を解決できますか?アイデアはありますか? (申し訳ありません) – Ikanagura

+0

'Nom2'は、コピーされたブックの名前を含むべきvarableです。この変数は 'SaveXL'の内部で使われます。どのファイルの名前を変更しましたか?もっと詳しく説明してください。 – dee

+0

実際、あなたが言ったように、 'Nom2'は' SaveXL'のおかげで保存されたワークシートの名前をあらかじめ入力するための名前を含む変数です。 しかし、保存ウィンドウにあらかじめ入力された名前を変更したとき、 'Test'は機能しません。例: 'Nom2' = Helloの場合、' SaveXL'がワークシートを保存するように頼んだら、「Hello」が「Name of file」フィールドに表示されます。 この保存名を "Hi"に変更した場合、ファイルは "Hi"という名前で保存されますが、パラメータが "Nom2"(Hello)ではなく "Hi"でないため、 'Test'を実行しませんでした...私の英語があまり良くないので、それがはっきりしていることを願っています:/ – Ikanagura

0

Test()の下にパラメータとしてワークブックを渡すことができます。したがって、ブックを保存した後に、新しいブックで[テスト]サブを実行します。

'Here I insert a parameter to your sub 
Sub Test(myWorkBook as Workbook) 
    Dim F As Integer, C As Integer 
    For F = 1 To myWorkBook.worksheets.Count 
     'ActiveSheet.Select 
     For C = 15 To 2 Step -1 
      myWorkBook.worksheets(f).Columns(C).Select 
      Selection.End(xlDown).Select 
      derniereligne = ActiveCell.Row 
      If myWorkBook.worksheets(f).Columns(C).Hidden = True Then 
       myWorkBook.worksheets(f).Columns(C).Delete 
      End If 
     Next C 
    Next F 
End Sub 

今すぐあなたのサブsaveXL()

Sub SaveXL() 
    Dim Nom2 As String 
    Dim Jour2 As String 
    Dim FPath2 As String 
    Jour2 = Format(Now(), "yyyymmdd - h\hmm'") 
    Nom2 = Jour2 & " Pricelist" 
    FPath2 = Sheets("PARAM").Range("B33").Value 
    On Error GoTo fin4 
    fichier = Application.GetSaveAsFilename(FPath2 & Nom2, "Fichiers Excel (*.xls), *.xls") 
    ActiveWorkbook.SaveCopyAs fichier 
    call test(ActiveWorkbook) '<-- here you use your Test() sub 
    Exit Sub 
    fin4:MsgBox "La création de l'excel a échoué" 
End Sub 

PS:SaveXLコールテストで申し訳ありませんが、私の英語

関連する問題