问题描述
我在 Excel VBA 中的宏有问题。这是我的第一个宏...所以,我有第一个文件,按钮在哪里,它打开另一个文件。在另一个文件中,我创建了一个用户窗体,用户无法在其中检查哪个区域将执行“某事”。这是我问题的开始。我希望,当用户检查该区域时,打开该区域 xd 文件夹中的最新文件,因此我找到了代码并且它可以工作,下一个文件打开,我想拆分这个最新文档的一部分,其中是某些东西的数量并且它也有效,但我想将此 numba()+1
添加到此文件中,其中具有 checkig 区域可能性的用户表单,另外我想在此拆分后将 numba()
导出到另一个文件并关闭此文件,从我导出 numba()
,但是当我执行 Workbooks(My Path&Latest File).Close SaveChanges=False
时,Vba 显示错误。所以你能帮我解决这个问题吗?如何将这个 numba+1
从打开最新文件导出到这个准确的,我实际上工作的地方?
或者你有什么想法,我怎样才能在不打开它的情况下只导出这个最新文件的名称?然后我将导出onlu名称,拆分它并为该文档制作下一个数字......下面我添加了代码,感谢您的帮助:)
Private Sub CommandButton1_Click()
Dim MyPath As String
Dim MyFile As String
Dim LatestFile As String
Dim LatestDate As Date
Dim LMD As Date
MyPath = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
If Right(MyPath,1) <> "\" Then MyPath = MyPath & "\"
MyFile = Dir(MyPath & "*.xlsx",vbnormal)
If Len(MyFile) = 0 Then
MsgBox "No files were found...",vbExclamation
Exit Sub
End If
do while Len(MyFile) > 0
LMD = FileDateTime(MyPath & MyFile)
If LMD > LatestDate Then
LatestFile = MyFile
LatestDate = LMD
End If
MyFile = Dir
Loop
Workbooks.Open MyPath & LatestFile
Dim numba() As String
numba() = Split(Range("I6"),"-")
Call NAZWA
Sub NAZWA()
This.Workbooks.Activate
Worksheets("Tabelle1").Activate
Range("I6") = "xx-xxxx-"
End Sub
解决方法
请尝试Workbooks(LatestFile).close
Workbooks
集合仅保留工作簿名称,而不保留其全名...
使用这种技术:
Dim MyOpenWb As Workbook
Set MyOpenWb = Workbooks.Open(MyPath & LatestFile) 'set a reference to the opened workbook for later use
'access any worsheet/cell in that workbook like
MyOpenWb.Worksheets("Sheet1").Range("A1").Value = "write into Sheet1 cell A1"
'make sure every Range/Cells/Columns/Rows has a workbook/worksheet specified
'otherwise it is not clear where Excel should look for Range("I6")
Dim numba() As String
numba() = Split(MyOpenWb.Worksheets("Tabelle1").Range("I6"),"-")
'do your stuff here …
'Close it
MyOpenWb.Close SaveChanges:=True 'or False
当您打开工作簿时,请将其设置为变量,例如 MyOpenWb
。然后,您可以使用此变量访问工作簿并关闭它。因此,一旦它打开,您就不必再处理它的名称或路径。
避免使用 .Select
和 .Activate
而是通过如下命名工作簿和工作表来访问范围:
ThisWorkbook.Worksheets("Tabelle1").Range("I6").Value = "xx-xxxx-"
您可能会从阅读中受益 How to avoid using Select in Excel VBA。