如何改进GetOpenfile函数的现有代码

时间:2016-04-27 10:14:01

标签: vba

请有人改进我当前的代码 - 打开一个框供用户选择文件,当选择正确的文件时,它会将数据粘贴到正确的选项卡。但是,我不知道如何改进它如下:

1)我可以在代码中指定目标文件的名称(成本核算),以便它只适用于该文件吗?目前,用户可以选择任何文件,并查找工作表名称" SAP"并且如果它发现它不起作用 - 进入调试模式 - 我希望它给出消息"宏将立即结束,因为你没有选择正确的文件"。

2)与上面的1相同,但现在的消息是" Macro现在将结束,因为文件中没有SAP表"。选择正确的文件后会出现此消息,但其中没有SAP工作表。

2)清除目标" SAP"中的现有数据。给定范围内的工作表(目前我是否有正确的代码?)

3)当用户点击取消时(因为他们不想继续),会显示一条消息并且子结束 - "宏将立即结束,因为您没有选择文件"

谢谢!

'Set source workbook
 Set wb = ActiveWorkbook
'Open the target workbook
 vFile = Application.GetOpenFilename("Excel-files,*.xlsm", 1, "Please select file", , False)
 Set wb2 = ActiveWorkbook
'clear existing values form target book
 wb2.Worksheets("SAP").Range("A:N").ClearContents
'Copy/paste the visible data to the new workbook
 wb.Worksheets("sheet1").Cells.SpecialCells(xlCellTypeVisible).Copy
 wb2.Worksheets("SAP").Range("A1").PasteSpecial Paste:=xlPasteValues
 ActiveSheet.Range("A1").Select
 Application.CutCopyMode = False
 Windows("Format MCP6 Final.xlsm").Close

1 个答案:

答案 0 :(得分:1)

我认为你可以通过搜索具体的问题解决大部分问题,但无论如何我会尽力帮助你。

1如果您知道文件的名称,为什么让用户选择它?  无论如何,您可以使用" workbook.name"检查名称。并测试你想要的任何东西

2这很容易做到:

    If (Worksheets("SAP").Name = "") Then
      MsgBox "Macro will end now because there is no SAP sheet in the file"
      Exit Sub
    End If

2.2?取决于您尝试删除的内容。 ClearContents不会删除任何格式化。

3您必须将vFile定义为Variant并将其检查为false:

vFile = Application.GetOpenFilename("Excel-files,*.xlsm", 1, "Please select file", , False)

if vFile = false then 
  MsgBox "The macro will end now because you did not select the file"
  Exit Sub
End If

但是对于未来,请将4个问题拆分为4个帖子,并尝试描述您尝试过的内容以及遇到问题的地方。和问题一样:"我所做的是否正确?"不适合SO。试试看,如果你有问题,请问为什么会出现这些问题。