2012-10-23 123 views
0

我有以下的Excel程序,我收集起来,我在不同的工作簿下使用它进行不同的计算。所以我在想每次改变main和outcome文件的过程,我应该能够选择我想要执行计算的文件和结果文件的文件路径。使用Excel VBA浏览主Excel文件和另存为目录路径

但我无法找到保存的路径,任何事情,我很感激,如果你能帮助

Sub AsBuiltForm() 

Dim SaveName As String 
Dim mainBook As Workbook 

a = InputBox("ENTER FIRST NUMBER ") 
b = InputBox("ENTER LAST NUMBER ") 

Workbooks.Open Filename:="C:\" 'main file can be browsed? 

Set mainBook = Excel.Workbooks("CP.xlsx") 

    For i = a - 1 To b - 1 

     mainBook.Sheets(1).Range("bi1") = i + 1 
     SaveName = Sheets(1).Range("bi1").value & ".xlsx" 

     mainBook.SaveCopyAs "C:\" & SaveName 'save directory? 
     Workbooks.Open Filename:="C:\" & SaveName 'save directory? 

     With Excel.ActiveWorkbook 
      .Sheets("1 of 2").Range("A1:CT103").value = Sheets("1 of 2").Range("A1:CT103").value 
      .Sheets("2 of 2").Range("A1:CT103").value = Sheets("2 of 2").Range("A1:CT103").value 
      Excel.Application.DisplayAlerts = False 
      .Sheets("Sheet1").Delete 
      .Sheets("il oufall").Delete 

      .Sheets("1 of 2").Select 
      Columns("Bh:BZ").Select 
      Selection.Delete Shift:=xlToLeft 

      .Sheets("2 of 2").Select 
      Columns("Bn:BZ").Select 
      Selection.Delete Shift:=xlToLeft 

      .Close True 

     End With 

    Next 

mainBook.Close False 
Set mainBook = Nothing 

End Sub 

回答

1

您可以使用Application.GetOpenFileName挑选您想要在运行时打开文件。

您可以使用下面的功能浏览您希望保存文件的文件夹。

Sub FindFolder() 

Dim myFolder as String 
myFolder = BrowseFolder("Pick a Folder Where to Save") 

End Sub 

Function BrowseFolder(Optional Caption As String, Optional InitialFolder As String) As String 

' based on Browse For Folder from: 
' http://www.cpearson.com/excel/BrowseFolder.aspx 
' this functions requires that the following Reference is active: 
    'Microsoft Shell Controls and Automation 

Const BIF_RETURNONLYFSDIRS As Long = &H1 

Dim wsh As Object 
Dim SH As Shell32.Shell 
Dim F As Shell32.Folder 

Set wsh = CreateObject("Wscript.Shell") 
Set SH = New Shell32.Shell 
Set F = SH.BrowseForFolder(0&, Caption, BIF_RETURNONLYFSDIRS, InitialFolder) 
If Not F Is Nothing Then 
    If F = "Desktop" Then 
     BrowseFolder = wsh.Specialfolders(F) 
    Else 
     BrowseFolder = F.Items.Item.path 
    End If 
End If 

End Function 
+0

您是否会详细说明或描述代码的用法,因为它似乎不起作用? – serhat

+0

@serhat - >你能告诉它它不工作吗?你是否收到错误信息?如果是这样,那是什么?如果不是,为什么不工作? –

+0

当然,首先Application.GetOpenFileName是完全正在挑选我想要使用的文件。一半的问题是可以的。但第一个子程序浏览文件夹保存文件没有什么缺失?因为vba试图将browseFolder理解为变量。第二部分从功能部分开始对我来说完全是希腊语。 – serhat

0

以下内容对您的问题并不是真正的答案,而是一些改进代码的提示,以及作为注释添加的时间太长。

Workbooks.Open返回Workbook对象,你可以保存参考,所以你不必依靠ActiveWorkbook

Dim oWorkbook As Workbook 

Set oWorkbook = Workbooks.Open(Filename:="C:\" & SaveName) 

'***** Do something with oWorkbook 
Debug.Print oWorkbook.FullName 

Set oWorkbook = Nothing 

其他一些提示:

  • 使用Option Explicit顶部每个模块强制显式声明所有变量,以便更早地查找拼写错误和其他错误。

  • Avoid selecting cells

+0

谢谢你的时间,我会记住所有编写代码的尝试。 – serhat

0

是,浏览文件现在的作品;除了所有的细节外,由于变量“bi1”我命名文件时面临的问题,并保存尽可能多的循环。在我打扰你之前,我检查了几次,但我认为我没有足够的信息来解决使用Application.GetOpenFileName中的文件“fn”。

Option Explicit 

Sub AsBuiltForm() 

    Dim fn 
    Dim myFolder As String 
    Dim SaveName As String, a As Integer, b As Integer, i As Integer  

    myFolder = BrowseFolder("Pick a Folder Where to Save") 

    MsgBox "Choose Calculation File " 
    fn = Application.GetOpenFilename 

Workbooks.Open fn     

    a = InputBox("ENTER FIRST NUMBER ") 
    b = InputBox("ENTER LAST NUMBER ")   

For i = a - 1 To b - 1 Step 1 

Application.DisplayAlerts = False 

Workbooks.Open Filename:=fn 

    Range("bi1") = i + 1 

    SaveName = ActiveWorkbook.Sheets(1).Range("bi1").value 

    Sheets(1).Range("A1:CT103").value = Sheets(1).Range("A1:CT103").value 

    Sheets(2).Range("A1:CT103").value = Sheets(2).Range("A1:CT103").value 

    Application.ActiveWorkbook.SaveAs myFolder & SaveName 


    ActiveWorkbook.Close True 

    Next 

End Sub 

Function BrowseFolder(Optional Caption As String, Optional InitialFolder As String) As String 

' based on Browse For Folder from: 
' http://www.cpearson.com/excel/BrowseFolder.aspx 
' this functions requires that the following Reference is active: 
    'Microsoft Shell Controls and Automation 

Const BIF_RETURNONLYFSDIRS As Long = &H1 

Dim wsh As Object 
Dim SH As Shell32.Shell 
Dim F As Shell32.Folder 

Set wsh = CreateObject("Wscript.Shell") 
Set SH = New Shell32.Shell 
Set F = SH.BrowseForFolder(0&, Caption, BIF_RETURNONLYFSDIRS, InitialFolder) 
If Not F Is Nothing Then 
    If F = "Desktop" Then 
     BrowseFolder = wsh.Specialfolders(F) 
    Else 
     BrowseFolder = F.Items.Item.Path 
    End If 
End If  
End Function 
相关问题