使用VBA只抓取文件名/文件path的一部分

我不知道如何解决这个问题。 我已经做了相当多的研究,但是我发现的大部分答案都与我所需要的有所不同。

我试图完成的是这样的:

  1. 手动打开现有工作簿(wbAI),
  2. 启动macros,
  3. 使用msoFileDialogOpen查找并打开一个文件(称为wb2),
  4. 将wb2文件名的一部分 (文件名中有一个date)作为variables或string存储。 (我不确定哪个更好,也许我不需要全部存储…),
  5. 将wb2的部分文件名(date)粘贴到wb1中的某个单元格中,
  6. 从wb2复制必要的数据,
  7. 将数据粘贴到wb1中,
  8. 格式化数据,
  9. 在粘贴的数据上使用VLOOKUP,
  10. closureswb2而不保存
  11. 结束macros。

除了数字4和5,我的macros可以完成上面列出的每一步。 一方面,我想知道如何去追求这个目标,另一方面,我想知道在我现在的代码里面能够find什么地方。

给你一个我正在谈论的例子:假设在第三步中我打开一个名为“01.31.13组名”的工作簿。 而文件path是从一个Sharepoint网站,所以它看起来像这样:

“ https://company.com/team/teamone/_layouts/xlviewer.aspx?01.31.13%20Group%20Names%20.xlsm&Source=https …….”

我怎样才能挑出文件名/文件path中的date?

这是我的代码的开始:

Sub Test() Dim lastRow As Long, i As Long Dim ws As Worksheet Dim wbSource As Workbook Dim wbAI As Workbook Dim vrtSelectedItem As Variant Set wbAI = ActiveWorkbook Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogOpen) .InitialFileName = https://company.com/team/teamone & "\" .AllowMultiSelect = False .Show ' ****** Is this where the new code could be inserted? ******* For Each vrtSelectedItem In .SelectedItems Set wbSource = Workbooks.Open(vrtSelectedItem) Next End With ' Check if the first cell contains data. If not then close file If Range("Profile!H9") = "" Then ActiveWorkbook.Close savechanges:=False ActiveWorkbook.Saved = False 

任何build议,欢迎! 感谢您的时间!

编辑:这是我的代码看起来菲利普的build议后:

 Sub Test() Dim lastRow As Long, i As Long Dim ws As Worksheet Dim wbSource As Workbook Dim wbAI As Workbook Dim vrtSelectedItem As Variant Set wbAI = ActiveWorkbook Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogOpen) .InitialFileName = https://company.com/team/teamone & "\" .AllowMultiSelect = False .Show For Each vrtSelectedItem In .SelectedItems Set wbSource = Workbooks.Open(vrtSelectedItem) Next End With dateVar = Left(wbSource.Name, 8) '<~~~~ New code ' Check if the first cell contains data. If not then close file If Range("Profile!H9") = "" Then ActiveWorkbook.Close savechanges:=False ActiveWorkbook.Saved = False Else Sheets("Profile").Activate Range("H9:I" & Cells(Rows.Count, "H").End(xlUp).Row).Select Selection.Copy Windows("wbName").Activate Sheets("Sheet1").Activate Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("E1").Value = dateVar '<~~~ New code 

从文件名你将使用function返回date的左8个字符

 dateVar=left(wbSource.name, 8) 

那么你可以把它放在你的单元格中:

 rangeVar.value=dateVar 

希望能让你走

菲利普