【问题标题】:Macro to "Save as" workbook 2 from the data in a cell from Workbook 1从工作簿 1 的单元格中的数据“另存为”工作簿 2 的宏
【发布时间】:2012-10-01 21:50:38
【问题描述】:

我是宏的基本用户,但现在陷入以下困境。 我打开了两本工作簿。我需要“另存为”并使用工作簿 1 中单元格中的文件名关闭工作簿 2。宏从工作簿 1 运行。 抱歉,这是我从互联网上所能得到的。我猜最后一行有变化。哦对了,我也不知道 Dim 是什么意思。

Dim FName As String
Dim FPath As String

FPath = "G:"

FName = Sheets("sheet 1").Range("A1").Text

ThisWorkbook.SaveAs Filename:=FPath & "\" & FName 

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    Dim 是您如何 Dimension(声明您的变量),在您的情况下,告诉代码 FName 将引用您分配的字符串值。有关不错的教程,请参阅This link

    要让您的代码正常工作,请尝试以下操作:

    Dim FName As String
    Dim FPath As String
    
    FPath = "G:"
    
    FName = ThisWorkbook.Sheets("sheet 1").Range("A1").Text 'use ThisWorkbook since you are running from Workbook1
    
    With Workbooks("Workbook2.xlsx")
        .SaveAs Filename:=FPath & "\" & FName 
        .Close True '-> use false to not save changes
    End With
    'here you need to tell VBA what specific workbook you want to save
    'if you used ThisWorkbook here, you would save the workbook where the code runs from, which is Workbook1
    

    您还可以采取更好的方法,例如:

    Dim FName as String, FPath as String
    Dim wkb1 as Workbook, wkb2 as Workbook
    
    Set wkb1 = ThisWorkbook '-> or Set wkb1 = Workbooks("workbook1")
    
    FPath = "G:"
    FName = wkb1.Sheets("sheet 1").Range("A1").Text
    
    Set wkb2 = Workbooks("workbook2")
    With wkb2
        .SaveAs Filename:=FPath & "\" & FName
        .Close True '-> use false to not save changes
    End With
    

    【讨论】:

    • 美丽。像魅力一样工作。
    • 伟大的@user1706708。如果您觉得这解决了您的问题,请检查它作为答案,以便其他人在未来受益。
    • 对不起,如果可以的话,我也需要关闭 Workbook 2
    • @user1706708。我已经编辑了上面的两段代码。关闭工作簿很容易:)
    【解决方案2】:

    由于其他人有状态,Dim 代表维度。

    从历史上看,在各种 BASIC(初学者的通用符号指令代码)编程语言中,您不必声明变量,但必须声明的数组除外。因此,即使是非常古老的 BASIC 语言也有一种声明数组的方法,这是使用“Dim”关键字完成的。当基本语言开始支持声明常规变量时,它们只是借用了已经在使用的关键字 Dim。所以 Dim 代表维度,最初用于表示数组的大小和/或边界,但被接管以声明任何类型的变量。

    顺便说一句,随着编程语言的发展,其语言设计者通常不愿引入新关键字,因为这样做通常会破坏现有程序。例如,如果他们引入了“var”关键字,它可能会破坏许多使用“var”作为变量名的现有程序。随着语言的发展,发现现有的关键字或多或少地重新用于增加功能的情况并不少见。

    【讨论】:

    • 对不起,如果可以的话,我也需要关闭 Workbook 2
    • 明白,没问题。我认为这就是为什么最好在不同的帖子中提出两个不同的问题(即使它们是相关的),这样你就可以独立地接受这两个答案。干杯。
    【解决方案3】:

    你在正确的轨道上。 您可以将最后一个留置权更改为此,它会起作用:

    Workbooks("Workbook2Filename.xls").SaveAs Filename:=FPath & "\" & FName 
    

    不过,我推荐以下方法:

    Dim FName As String
    Dim FPath As String
    
    Dim wbBook1 As Workbook
    Dim wbBook2 As Workbook
    
    Set wbBook1 = ActiveWorkbook
    Set wbBook2 = Workbooks("Workbook2Filename.xls") 'assumed workbook 2 is already open
    
    FPath = "G:"
    FName = wbBook1.Sheets("sheet 1").Range("A1").Text
    
    wbBook2.SaveAs Filename:=FPath & "\" & FName
    
    Set wbBook1 = Nothing
    Set wbBook2 = Nothing
    

    Dim 代表 Dimension,它是您告诉 VBA 创建一个变量来存储信息的方式。

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多