(VBA或公式)从单元格打开超链接并从新单元格值保存/重命名下载的文件

时间:2014-03-26 13:40:31

标签: excel vba excel-vba excel-2010

计划: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多行代码:-)循环可以在两个不同的列之间工作吗?

请帮忙,我从哪里开始?!

1 个答案:

答案 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属性到达相邻的单元格,然后获取文件名的值。