繁体   English   中英

使用Excel VBA打开工作簿,从certian单元格复制值,保存新表单,然后关闭打开的工作簿

[英]Using Excel VBA to Open a workbook, copy values from certian cells, save the new form, then close the opened workbook

我有一个用于跟踪项目信息的工作簿。 我一直在更新工作簿功能和宏,但目前没有办法将所有用户输入的信息传输到更新的工作簿。 我正在创建一个“IMPORT”按钮,允许用户选择较旧版本的工作簿,打开该工作簿(wbout),将值复制到新工作簿(wbin),保存新工作簿,然后关闭旧工作簿一个没有保存它。

此时我遇到了Workbooks.Open命令的麻烦。 具有该命令的行打开工作簿,然后我得到一个

运行时错误'91':对象变量或未设置块变量。

有人可以告诉我做错了什么吗? 谢谢

Private Sub ImportPrj1_Click()
Dim rngin As Range
Dim rngout As Range
Dim wsin As Worksheet
Dim wsout As Worksheet
Dim wbin As Workbook
Dim wbout As Workbook
Dim namein As String
Dim folderin As Variant
Dim msg As String

Set wbin = ActiveWorkbook

folderin = Application.GetOpenFilename("Excel-files,*.xlsm", 1, "Select Older Version to transfer information from.", , False)
If folderin = False Then Exit Sub

Application.ScreenUpdating = False

wbout = Workbooks.Open(folderin)  ' <--- Line executes but returns error
Set wsin = wbin.Worksheet("P3 PayOuts")
Set wsout = wbout.Worksheets("P3 PayOuts")
wsin.Range("H4").Value = wsout.Range("H4").Value
wsin.Range("C9:V10").Value = wsout.Range("C9:V10").Value
wsin.Range("K3:K5").Value = wsout.Range("K3:K5").Value
wsin.Range("L3:L5").Value = wsout.Range("L3:L5").Value

' Create File name, save new tracker, close old tracker, make summary active,screen updates = true
namein = InputBox("Enter 1-2 word project identifier to be used in the File Name", "File Name")
namein = "Project Tracker V1.2" & namein
msg = "Project Tracker with imported data will be saved in the same folder as the old version"
msg = msg & vbNewLine & vbNewLine & "File Name: " & namein & ".xlsm"
MsgBox (msg)

Application.DisplayAlerts = False
Application.EnableEvents = False

folderin = Application.wbout.Path
namein = folderin & "\" & namein
NewBook.SaveAs Filename:=namein, FileFormat:=52 ' xlOpenXMLWorkbookMacroEnabled

Workbooks(wbout).Close (False)

With Application
    .DisplayAlerts = True
    .EnableEvents = True
    .ScreenUpdating = True
End With

wbin.Worksheets("Summary").Activate

End Sub

您收到错误91因为您在没有Set关键字的情况下分配对象引用,此处:

wbout = Workbooks.Open(folderin)

一旦是固定的,你得到错误438,因为你指的是未在上定义的成员Excel.Workbook接口:

Set wsin = wbin.Worksheet("P3 PayOuts")

这是Worksheets ,而不是Worksheet

这两种错误的(也可能是更多的-你必须在有未使用的变量,然后我希望NewBook炸掉一样)本来是可以避免通过检查Rubberduck ,一个开源VBIDE外接程序项目我管理。

尝试将此行输入上面的代码“Wbout = Workbooks.Open(folderin)”行:

Tmp = MsgBox(folderin,vbokonly,"folderin:")

如果结果只是一个文件名(例如不是完整路径),请尝试以下修改(您可以删除上面的内容):

Set WBout = Workbooks.Open(WBin.Path & "\" & folderin)

我通常也使用Sheets集合而不是Worksheets ...不确定这是否会改变任何东西,但我过去曾遇到过Worksheets的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM