计划:Excel 2010年 经验等级:基本
问题:
我有一个链接表,我想打开每个链接(它们是我必须登录的安全服务器上的.csv / .xlsx文件),然后使用由第三行信息生成的文件名保存{{1保持BatchID完整(如下所示)。
Column (C)
这些链接可能会弹出一个登录信息(没问题,我有凭据,但是如果使用VBA,硬编码就会更安全,因为如果我错过弹出窗口它就会失败)。
该列表非常广泛,每月更新
原始的csv / .xlsx文件名类似:
| A | B | C |
| Batch Date | links | New name |
|------------|--------------|----------|
| 3/03/2014 | View | 20140303 |
| 2/05/2014 | View | 20140205 |
| 1/02/2014 | View | 20140102 |
| 12/01/2013 | View | 20131201 |
| 11/01/2013 | View | 20131101 |
| 10/01/2013 | View | 20131001 |
| 9/01/2013 | View | 20130901 |
| 8/01/2013 | View | 20130801 |
数字始终不同(因此上面的新列),但1036548025_detailed_sales_report.xls
始终保持静态。
我希望通过使用通配符保留文件名?所以类似于:
_detailed_sales_report.xls
我已经用Google搜索从Excel打开超链接,但大部分都是关于一般的超链接或打开链接的工作簿,而我想用它来下载新的工作。
修改
每行之间也需要延迟,服务器出了名的慢。
编辑3 每个链接都是新生成的链接,没有链接是相同的(如文件名):
savefilename = (A10) & "*" & "_detailed_sales_report.xls"
以上是我运行宏录制器时发生的情况,我不想编写100多行代码:-)循环可以在两个不同的列之间工作吗?
请帮忙,我从哪里开始?!
答案 0 :(得分:2)
我无法模拟您正在打开的链接,但您可以试试这个:
Sub test()
Dim hlink As Hyperlink
Dim wb As Workbook
Dim saveloc As String
saveloc = "D:\location\"
For Each hlink In ThisWorkbook.Sheets("NameOfYourSheet").Hyperlinks
Set wb = Workbooks.Open(hlink.Address)
wb.SaveAs saveloc & hlink.Parent & ".xlsx"
wb.Close True
Set wb = Nothing
Next
End Sub
我认为Excel可以直接使用地址打开链接中的文件
上面代码的作用是遍历目标表中的所有超链接
hlink.Address
获取地址,然后在Workbooks.Open
方法中使用它
然后使用.xlsx
作为文件名将其保存为hlink.Parent
文件
hlink.Parent
返回超链接的单词
要完成另存为路径,我们会初始化文件位置saveloc
这是尝试和测试,但仅限于我在本地驱动器中创建的链接。
编辑1:使用超链接的相邻单元格值进行保存。
For Each hlink In ThisWorkbook.Sheets("NameOfYourSheet").Hyperlinks
Set wb = Workbooks.Open(hlink.Address)
wb.SaveAs saveloc & hlink.Range.Offset(0,1).Value & ".xlsx"
wb.Close True
Set wb = Nothing
Next
hlink.Range
会返回超链接所在的Range Object
我们使用Offset
属性到达相邻的单元格,然后获取文件名的值。